Skip to content

Commit 2de94df

Browse files
github-actions[bot]pedroootMrCloudSec
authored
fix(iam): handle no arn serial numbers for MFA devices (#4710)
Co-authored-by: Pedro Martín <[email protected]> Co-authored-by: Sergio <[email protected]>
1 parent 0d56f46 commit 2de94df

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
@@ -374,9 +374,10 @@ def __list_mfa_devices__(self):
374374
for page in list_mfa_devices_paginator.paginate(UserName=user.name):
375375
for mfa_device in page["MFADevices"]:
376376
mfa_serial_number = mfa_device["SerialNumber"]
377-
mfa_type = (
378-
mfa_device["SerialNumber"].split(":")[5].split("/")[0]
379-
)
377+
try:
378+
mfa_type = mfa_serial_number.split(":")[5].split("/")[0]
379+
except IndexError:
380+
mfa_type = "hardware"
380381
mfa_devices.append(
381382
MFADevice(serial_number=mfa_serial_number, type=mfa_type)
382383
)

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+
audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
478+
iam = IAM(audit_info)
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)