feat(github): add organization_repository_deletion_limited dir and checks

This commit is contained in:
Shria Halkoda
2026-02-26 03:22:47 -06:00
parent fac089ab78
commit 4128d6ab78
3 changed files with 66 additions and 0 deletions
@@ -0,0 +1,31 @@
{
"Provider": "github",
"CheckID": "organization_repository_deletion_limited",
"CheckTitle": "Ensure repository deletion is limited to trusted organization users.",
"CheckType": [],
"ServiceName": "organization",
"SubServiceName": "",
"ResourceIdTemplate": "",
"Severity": "high",
"ResourceType": "GitHubOrganization",
"ResourceGroup": "governance",
"Description": "Ensure repository deletion/transfer is restricted so only trusted organization users (owners) can delete or transfer repositories.",
"Risk": "If members can delete or transfer repositories, accidental or malicious deletions can cause irreversible data loss, service disruption, and increased blast radius from compromised accounts.",
"RelatedUrl": "https://docs.github.com/en/organizations/managing-organization-settings/setting-permissions-for-deleting-or-transferring-repositories",
"Remediation": {
"Code": {
"CLI": "",
"NativeIaC": "",
"Other": "1. Sign in to GitHub as an organization owner\n2. Go to Organization > Settings\n3. Under \"Access\", click \"Member privileges\"\n4. Disable \"Allow members to delete or transfer repositories\"\n5. Save changes",
"Terraform": ""
},
"Recommendation": {
"Text": "Disable member repository deletion/transfer privileges so only organization owners can delete or transfer repositories.",
"Url": "https://docs.github.com/en/organizations/managing-organization-settings/setting-permissions-for-deleting-or-transferring-repositories"
}
},
"Categories": [],
"DependsOn": [],
"RelatedTo": [],
"Notes": ""
}
@@ -0,0 +1,35 @@
from typing import List
from prowler.lib.check.models import Check, CheckReportGithub
from prowler.providers.github.services.organization.organization_client import (
organization_client,
)
class organization_repository_deletion_limited(Check):
"""Check if repository deletion/transfer is limited to trusted organization users."""
def execute(self) -> List[CheckReportGithub]:
findings = []
for org in organization_client.organizations.values():
members_can_delete = getattr(org, "members_can_delete_repositories", None)
if members_can_delete is None:
continue
report = CheckReportGithub(metadata=self.metadata(), resource=org)
if members_can_delete is False:
report.status = "PASS"
report.status_extended = (
f"Organization {org.name} restricts repository deletion/transfer to trusted users."
)
else:
report.status = "FAIL"
report.status_extended = (
f"Organization {org.name} allows members to delete/transfer repositories."
)
findings.append(report)
return findings