Skip to content

Commit 6e135ab

Browse files
authored
fix(iac): ignore mutelist in IaC scans (#9331)
1 parent 65b054f commit 6e135ab

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

api/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ All notable changes to the **Prowler API** are documented in this file.
66

77
### Fixed
88
- Fix typo in PDF reporting [(#9322)](https://github.com/prowler-cloud/prowler/pull/9322)
9+
- Fix IaC provider initialization failure when mutelist processor is configured [(#9331)](https://github.com/prowler-cloud/prowler/pull/9331)
910

1011
---
1112

api/src/backend/api/tests/test_utils.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from prowler.providers.azure.azure_provider import AzureProvider
2222
from prowler.providers.gcp.gcp_provider import GcpProvider
2323
from prowler.providers.github.github_provider import GithubProvider
24+
from prowler.providers.iac.iac_provider import IacProvider
2425
from prowler.providers.kubernetes.kubernetes_provider import KubernetesProvider
2526
from prowler.providers.m365.m365_provider import M365Provider
2627
from prowler.providers.mongodbatlas.mongodbatlas_provider import MongodbatlasProvider
@@ -114,6 +115,7 @@ class TestReturnProwlerProvider:
114115
(Provider.ProviderChoices.GITHUB.value, GithubProvider),
115116
(Provider.ProviderChoices.MONGODBATLAS.value, MongodbatlasProvider),
116117
(Provider.ProviderChoices.ORACLECLOUD.value, OraclecloudProvider),
118+
(Provider.ProviderChoices.IAC.value, IacProvider),
117119
],
118120
)
119121
def test_return_prowler_provider(self, provider_type, expected_provider):
@@ -254,6 +256,72 @@ def test_get_prowler_provider_kwargs_with_mutelist(self):
254256
expected_result = {**secret_dict, "mutelist_content": {"key": "value"}}
255257
assert result == expected_result
256258

259+
def test_get_prowler_provider_kwargs_iac_provider(self):
260+
"""Test that IaC provider gets correct kwargs with repository URL."""
261+
provider_uid = "https://github.com/org/repo"
262+
secret_dict = {"access_token": "test_token"}
263+
secret_mock = MagicMock()
264+
secret_mock.secret = secret_dict
265+
266+
provider = MagicMock()
267+
provider.provider = Provider.ProviderChoices.IAC.value
268+
provider.secret = secret_mock
269+
provider.uid = provider_uid
270+
271+
result = get_prowler_provider_kwargs(provider)
272+
273+
expected_result = {
274+
"scan_repository_url": provider_uid,
275+
"oauth_app_token": "test_token",
276+
}
277+
assert result == expected_result
278+
279+
def test_get_prowler_provider_kwargs_iac_provider_without_token(self):
280+
"""Test that IaC provider works without access token for public repos."""
281+
provider_uid = "https://github.com/org/public-repo"
282+
secret_dict = {}
283+
secret_mock = MagicMock()
284+
secret_mock.secret = secret_dict
285+
286+
provider = MagicMock()
287+
provider.provider = Provider.ProviderChoices.IAC.value
288+
provider.secret = secret_mock
289+
provider.uid = provider_uid
290+
291+
result = get_prowler_provider_kwargs(provider)
292+
293+
expected_result = {"scan_repository_url": provider_uid}
294+
assert result == expected_result
295+
296+
def test_get_prowler_provider_kwargs_iac_provider_ignores_mutelist(self):
297+
"""Test that IaC provider does NOT receive mutelist_content.
298+
299+
IaC provider uses Trivy's built-in mutelist logic, so it should not
300+
receive mutelist_content even when a mutelist processor is configured.
301+
"""
302+
provider_uid = "https://github.com/org/repo"
303+
secret_dict = {"access_token": "test_token"}
304+
secret_mock = MagicMock()
305+
secret_mock.secret = secret_dict
306+
307+
mutelist_processor = MagicMock()
308+
mutelist_processor.configuration = {"Mutelist": {"key": "value"}}
309+
310+
provider = MagicMock()
311+
provider.provider = Provider.ProviderChoices.IAC.value
312+
provider.secret = secret_mock
313+
provider.uid = provider_uid
314+
315+
result = get_prowler_provider_kwargs(provider, mutelist_processor)
316+
317+
# IaC provider should NOT have mutelist_content
318+
assert "mutelist_content" not in result
319+
expected_result = {
320+
"scan_repository_url": provider_uid,
321+
"oauth_app_token": "test_token",
322+
}
323+
assert result == expected_result
324+
257325
def test_get_prowler_provider_kwargs_unsupported_provider(self):
258326
# Setup
259327
provider_uid = "provider_uid"

api/src/backend/api/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ def get_prowler_provider_kwargs(
158158

159159
if mutelist_processor:
160160
mutelist_content = mutelist_processor.configuration.get("Mutelist", {})
161-
if mutelist_content:
161+
# IaC provider doesn't support mutelist (uses Trivy's built-in logic)
162+
if mutelist_content and provider.provider != Provider.ProviderChoices.IAC.value:
162163
prowler_provider_kwargs["mutelist_content"] = mutelist_content
163164

164165
return prowler_provider_kwargs

0 commit comments

Comments
 (0)