Skip to content

Commit 8f2b39b

Browse files
pedroootjfagoagas
andauthored
fix(iam): handle no arn serial numbers for MFA devices (#4697)
Co-authored-by: Pepe Fagoaga <[email protected]>
1 parent 761eeba commit 8f2b39b

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

prowler/providers/aws/services/iam/iam_service.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,10 @@ def __list_mfa_devices__(self):
384384
for page in list_mfa_devices_paginator.paginate(UserName=user.name):
385385
for mfa_device in page["MFADevices"]:
386386
mfa_serial_number = mfa_device["SerialNumber"]
387-
mfa_type = (
388-
mfa_device["SerialNumber"].split(":")[5].split("/")[0]
389-
)
387+
try:
388+
mfa_type = mfa_serial_number.split(":")[5].split("/")[0]
389+
except IndexError:
390+
mfa_type = "hardware"
390391
mfa_devices.append(
391392
MFADevice(serial_number=mfa_serial_number, type=mfa_type)
392393
)

tests/providers/aws/services/iam/iam_service_test.py

+28-1
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ def test__get_password_policy__(self):
424424

425425
# Test IAM List MFA Device
426426
@mock_aws
427-
def test__list_mfa_devices__(self):
427+
def test__list_mfa_devices_arn__(self):
428428
# Generate IAM Client
429429
iam_client = client("iam")
430430
# Generate IAM user
@@ -455,6 +455,33 @@ def test__list_mfa_devices__(self):
455455
)
456456
assert iam.users[0].mfa_devices[0].type == "mfa"
457457

458+
# Test IAM List MFA Device
459+
@mock_aws
460+
def test__list_mfa_devices_number__(self):
461+
# Generate IAM Client
462+
iam_client = client("iam")
463+
# Generate IAM user
464+
iam_client.create_user(
465+
UserName="user1",
466+
)
467+
# Create Unknown MFA device
468+
hardware_mfa_devide = "XXXXXXXXX"
469+
iam_client.enable_mfa_device(
470+
UserName="user1",
471+
SerialNumber=hardware_mfa_devide,
472+
AuthenticationCode1="123456",
473+
AuthenticationCode2="123456",
474+
)
475+
476+
# IAM client for this test class
477+
aws_provider = set_mocked_aws_provider([AWS_REGION_US_EAST_1])
478+
iam = IAM(aws_provider)
479+
480+
assert len(iam.users) == 1
481+
assert len(iam.users[0].mfa_devices) == 1
482+
assert iam.users[0].mfa_devices[0].serial_number == hardware_mfa_devide
483+
assert iam.users[0].mfa_devices[0].type == "hardware"
484+
458485
# Test IAM List Virtual MFA Device
459486
@mock_aws
460487
def test__list_virtual_mfa_devices__(self):

0 commit comments

Comments
 (0)