# (L1) Ensure strict base permissions are set for repositories

Organization base permissions grant members no repository access or read access only.

Source: https://maester.dev/docs/tests/CIS.GH.1.3.8

<!-- This file is generated by website/scripts/generate-test-docs.mjs. Do not edit manually. -->

<div class="test-byline"><div class="test-byline-avatars"><a class="test-byline-avatar test-byline-avatar--author" href="/contributors/thetechgy" title="Travis McDade · Original author"><img src="https://github.com/thetechgy.png" alt="Travis McDade" width="28" height="28" loading="lazy" decoding="async" /></a></div><div class="test-byline-meta"><span class="test-byline-text">Contributed by <a href="/contributors/thetechgy">Travis McDade</a></span><a class="test-byline-link" href="/contributors">All contributors →</a></div></div>

<p class="test-part">Part of <a href="/docs/tests/cis">CIS</a> · GitHub · Organization settings · <a href="/docs/tests">All checks</a></p>

```powershell title="Run this check"
Invoke-Maester -TestId CIS.GH.1.3.8
```

## Overview

Organization base permissions grant members no repository access or read access only.

Base permissions apply across organization repositories. Keeping them at **None** or **Read** prevents the default from giving every member permission to change code. Members who contribute changes may need explicit repository, team, or role assignments after the default is reduced.

CIS GitHub Benchmark v1.2.0 lists section 1.3.8 as a Manual assessment. This test checks `default_repository_permission` from `GET /orgs/{org}` for the connected organization. It does not review individual repository collaborators, teams, or custom access grants.

The test passes for `none` or `read` and fails for `write` or `admin`, without regard to letter case. A missing, null, empty, unrecognized, or non-string value produces **Skipped**, with a reason explaining what could not be checked. Request or JSON parsing failures produce **Error**. Missing data does not mean the default is safe or the recommendation does not apply.

The test covers the connected organization's returned setting. It does not scan other organizations or reconstruct inherited policies. Maester checks this field after parsing the response, rather than validating the entire response schema.

#### Permissions required

Use an organization owner with a classic PAT or OAuth token carrying `admin:org` to read the full organization settings. With fine-grained PATs, the connection's membership check uses organization **Members: read**, and its separate administration check uses **Administration: read**. A successful connection does not guarantee that GitHub returns the field this test needs. See [Connect-MtGitHub](https://maester.dev/docs/commands/Connect-MtGitHub) for the connection checks.

For GHE.com, use `https://api.SUBDOMAIN.ghe.com` and a token for that host; do not assume the github.com device flow applies. The same missing-data rules apply to GHEC, Enterprise Managed Users, and GHE.com.

#### Remediation action

1. Plan explicit repository or team access for members who need to contribute after the default changes. Coordinate those grants with the relevant repository owners.
2. On the connected GitHub web host (`github.com` or your enterprise's `SUBDOMAIN.ghe.com`), open **Your organizations**, select the organization, then go to **Settings** > **Access** > **Member privileges**.
3. Set **Base permissions** to **None** or **Read**, review the changes, and confirm the default-permission change.

#### Related links

* [CIS GitHub Benchmark v1.2.0 - Section 1.3.8](https://www.cisecurity.org/benchmark/github)
* [GitHub: Organization base permissions](https://docs.github.com/en/enterprise-cloud@latest/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/setting-base-permissions-for-an-organization)
* [GitHub REST API: Get an organization](https://docs.github.com/en/enterprise-cloud@latest/rest/orgs/orgs?apiVersion=2026-03-10#get-an-organization)

## Details

<details>
<summary>Every attribute of this check</summary>

| Field | Value |
| --- | --- |
| Test ID | CIS.GH.1.3.8 |
| Severity | High |
| Suite | CIS |
| Product | GitHub |
| Feature | Organization settings |
| Area | Access control |
| Resource type | Tenant |
| User impact | Medium |
| Implementation cost | Medium |
| MITRE ATT&CK | T1677 Poisoned Pipeline Execution, T1195.002 Compromise Software Supply Chain |
| Supports benchmark | CIS GitHub Benchmark (version 1.2.0), requirement 1.3.8 |
| Benchmark level | L1 |
| Benchmark profiles | GH Level 1 |
| Supports controls | cis-github:1.3.8, nist-800-53-r5:AC-6, nist-800-53-r5:AC-3 |
| PowerShell test | [Test-MtCisGitHubStrictBasePermission](https://github.com/maester365/maester/blob/main/tests/cis/Test.CIS.GH.1.3.8.ps1) |
| Services | GitHub |

</details>

## Source

- Test: [`tests/cis/Test.CIS.GH.1.3.8.ps1`](https://github.com/maester365/maester/blob/main/tests/cis/Test.CIS.GH.1.3.8.ps1)
- Documentation: [`tests/cis/Test.CIS.GH.1.3.8.md`](https://github.com/maester365/maester/blob/main/tests/cis/Test.CIS.GH.1.3.8.md)
