◀ Playbook index
NO.19.3

GHAS

GitHub Advanced Security

Updated: 2026-10-27

In a nutshell

GitHub Advanced Security (GHAS) is GitHub's paid security suite. It scans your repositories for two things developers leak by accident: credentials and vulnerable code.

It comes as two products you buy separately — Secret Protection and Code Security.

Why now

INFOWhat is FIRST (Forum of Incident Response and Security Teams)?

A global network that brings together cybersecurity teams from around the world.

Founded in 1990. Security teams from more than 850 companies, government bodies, universities and other institutions across 110+ countries are members.

What it does

  1. Shares cyber attack information: members share what they see about attacks and software flaws (vulnerabilities) worldwide, to stop the damage from spreading.
  2. Builds the shared "danger rulers" everyone uses
    • CVSS ↗ (Common Vulnerability Scoring System): the global standard that scores how dangerous a bug is.
    • EPSS ↗ (Exploit Prediction Scoring System): uses AI and data to predict how likely a bug is to actually be exploited by attackers.

The June 2026 release, in short

  • Thanks to AI, bugs are being found at a record pace. But truly dangerous attacks have not gone up with them.
  • Don't try to fix every bug one by one. Use signals like EPSS to fix the truly dangerous ones first.

In one line: an organization where the world works together on information sharing and common rules to keep the internet safe to use.

Record CVE volume

FIRST ↗ forecasts a record ~66,000 new CVEs ↗ published in 2026 alone. AI-assisted discovery is a key driver.

GHSA +449% YoY

GitHub added curators and AI tooling. Its free Advisory Database ↗ feeds Dependabot (left).

AI vs AI race

AI-built exploits against AI-built patches. Time to exploitation is already down to 24 hours (right).

Dependabot alerts up 4x+

New alerts across GitHub, per quarter.

52M

Q1 25

70M

Q2 25

77M

Q3 25

82M

Q4 25

357M

Q1 26

313M

Q2 26

Steady at 70–80M through 2025, then a jump. CVE alerts are up 6x since February 2026.

Time to exploitation

Mean time from CVE disclosure to first exploitation.

1y 1mo 7d 1d 2.3y 1.7y 1.3y 10mo 8.6mo 4.2mo 53d 21.5d 24h 2018 2019 2020 2021 2022 2023 2024 2025 2026

Based on 3,500+ confirmed-exploited CVEs (CISA KEV + VulnCheck KEV) · zerodayclock.com

FIRST’s four recommendations 📖 Docs

Traditional security can’t keep up. The volume of new, AI-generated code outpaces what any traditional review process can inspect, and it arrives across many new surfaces at once. Gating at the pull request is already too late once an agent has propagated a change across repos.

🔧 Plan for double the patching work

Software maintainers should expect twice the work, while live-system patching stays roughly steady through 2026.

💰 Budget for security

With more CVEs and a growing software estate, allocating a dedicated security budget is imperative.

🎯 Triage by severity and exploitability

FIRST also recommends assessing severity with CVSS ↗, adjusted to your environment. Complement this with exploitability signals: Dependabot alerts show the EPSS score ↗, the likelihood of real-world exploitation.

🤖 Use defensive AI now

Exploitation is faster than ever. Attackers reach the same frontier models, and cost is no object. They find and weaponize risk faster than defenders can triage it, and supply chain attacks move faster than any human review cycle.

Data leaks in Japan (as of 2026-10-22) 📖 Docs

Public disclosure dates, including the cited updates.

Toyota T-Connect (2022-10-07)Potential exposure: 296,019 recordsSource

DisclosureA database access key in public GitHub source was exposed from December 2017 to September 2022. Unauthorized data access was not confirmed.

GitHub protectionSecret Protection ↗: detect keys in code and history. Push protection ↗: block supported secrets. Coverage depends on the secret format and configuration.

Money Forward (2026-05-01)Keys + passwords in codeSource

DisclosureCompromised GitHub credentials enabled repository copying. The company revoked and reissued keys and passwords embedded in source code.

GitHub protectionSecret Protection ↗: identify embedded credentials for revocation and rotation; block new supported secrets with push protection. This limits follow-on access, not the initial account compromise.

Gyazo (2026-10-21)Scope: ~23.62M accountsSource

DisclosureCommand injection in video conversion. Exact exported count unknown.

GitHub protectionCode Security / CodeQL ↗: detect this input-handling weakness class in supported code.

KDDI (ISP mail, 2026-07-21)Leak: 12,231,954 peopleSource

DisclosureEmail addresses leaked. Third-party flaw unknown to the vendor at detection.

GitHub protectionDependabot ↗: known advisories for supported dependencies, not a zero-day shield.

A wave of data leaks at Japanese companies

Cyber threats surged in 2026. In H1, suspicious accesses detected by police sensors rose 51% year over year; reported ransomware cases hit a half-year record of 123 (Japan NPA ↗).

Public disclosure dates, including updates, oldest first. As of 2026-10-22.

How GHAS answers it

Scanning tools normally live outside the platform: a separate console, a separate backlog, and findings that reach the developer days after the code was written. GHAS puts all four steps where the code already is.

▸ CLICK A STEP FOR DETAILS

FIND

🔎 FIND — what is already there

Scans the full git history and every branch for leaked credentials, and builds a queryable database of the code to trace vulnerable data flows.

Runs across every repository in the org without asking a single team to install or configure anything.

PREVENT

🚧 PREVENT — before it lands

Push protection rejects the push carrying a secret, so it never reaches the remote and never needs rotating.

A ruleset can hold a pull request until code scanning comes back clean, so the gate is a repository rule rather than a reviewer remembering.

FIX

🔧 FIX — in the pull request

Alerts arrive as annotations on the diff, not as tickets in another tool the developer has to go open.

Copilot Autofix proposes an actual patch with an explanation, so the developer reviews a change instead of first researching the vulnerability class.

PROVE

📊 PROVE — across the enterprise

One security configuration applies to every org and repo, including ones created tomorrow.

Security overview reports which repos are covered, which are not, and how the backlog is trending, so coverage is a number rather than an assumption.

SELECT A STEP ▸

What’s inside 📖 Docs

What is secret scanningfinds keys left in the codePRIMER

Not a vulnerability but a credential committed into code or git history: API keys, tokens, passwords. It is the cheapest way in for an attacker, so it often outranks SAST on priority. Deleting the line does not remove it from history, so a leaked secret must be revoked and rotated.

Secret scanningFREE ON PUBLIC

Scans the entire git history and every push against 200+ provider patterns. Validity checks confirm whether a leaked token is still live.

Push protectionFREE ON PUBLIC

Rejects the push carrying the secret, so it never reaches the remote and never needs rotating.

AI-detected secretsLICENSED ONLY

Catches unstructured credentials no regex describes: passwords in config, secrets in prose.

Custom patternsLICENSED ONLY

Your own token formats: internal services, legacy credentials, conventions no partner registers.

Delegated bypassLICENSED ONLY

Turns bypassing push protection into an approval request routed to a named reviewer group.

Public monitoringLICENSED ONLY

Enterprise, public preview. Detects secrets leaked in public repositories across GitHub, including repos you don't own. Attribution uses enterprise membership or verified domains. Requires Secret Protection or GHAS. Docs ↗

What is SASTreads the code you wrote, without running itPRIMER

Static Application Security Testing reads source without executing it, so it runs at commit and pull request time, where fixes are cheapest (shift-left). It sees every code path but is blind to runtime-only problems like misconfiguration or broken auth flows. That is DAST's territory: attacking a running app from outside (no first-party GitHub feature, results can be ingested via SARIF).

Code scanning (CodeQL)FREE ON PUBLIC

Compiles the code into a queryable database and traces data flow into dangerous sinks: injection, path traversal, deserialization.

Copilot AutofixFREE ON PUBLIC

Turns an alert into a suggested diff with an explanation on the pull request. This is what moves remediation rates.

AI-powered detectionsLICENSED ONLY

An AI engine covering languages and frameworks CodeQL has no queries for, during pull request review.

Third-party SARIFFREE ON PUBLIC

Any scanner emitting SARIF uploads into the same alert list: one backlog, one dashboard.

Security campaignsLICENSED ONLY

Slices the backlog into a finishable list with an owner and a due date, opened with the teams that own the code.

What is SCAchecks the code someone else wrotePRIMER

Software Composition Analysis reads manifests and lock files to find known vulnerabilities (CVEs) in libraries you did not write. Most of a modern app is dependencies, so by raw count it is usually the biggest source of findings. SAST covers the code you wrote, SCA the code someone else wrote: neither replaces the other.

Dependency reviewFREE ON PUBLIC

Shows dependencies added, removed, or upgraded by a PR. The Dependency Review Action can block known vulnerabilities and disallowed licenses when configured as a required check.

License complianceLICENSED ONLY

GA since 2026-10-16. Central enterprise license policy, enforced before merge through branch rulesets, with exceptions approved by an Enterprise Open-Source License Manager. Requires Enterprise Cloud + Code Security, including on public repos; data residency is supported. License compliance slide ↗ / Docs ↗

Custom auto-triage rulesFREE ON PUBLIC

Your own rules to auto-dismiss or reopen Dependabot alerts at scale, so the backlog reflects real risk.

Security overviewLICENSED ONLY

Org-wide aggregation of supply chain risk and coverage, across every repository.

Other supply-chain featuresFREE ON ALL PLANS

Dependency graph, Dependabot alerts, security and version updates, malware alerts, preset auto-triage rules, and SBOM export are free on every plan.

Pricing 📖 Docs

ProductPriceBilling unit
🔑 GitHub Secret Protection$19 / monthactive committer
🔍 GitHub Code Security$30 / monthactive committer
📦 Both together$49 / monthactive committer
  • 👥 Active committer = someone who pushed to a repo with the feature on in the past 90 days. Counted once across every repo and org; GitHub App bots don’t count
  • 🏷️ Sold on GitHub Team and GitHub Enterprise. On Enterprise Server and GHE.com every repository needs a licence
  • 🌐 Public repos get most features free, not all — custom patterns, delegated bypass, AI-detected secrets, campaigns and Security overview still need a licence (exact split ↗)

Pre-purchase inventory — Risk Assessments 📖 Docs

Two free assessments run from Org → Security → Assessments and show what is already hiding in your repos. No licence, no trial, and you see the numbers before deciding to buy.

🔑 Secret Risk Assessment

Types and count of secrets sitting in your org's repositories, aggregated by category.

SCOPE
All repos — public, private, internal, archived
RUNS
Once
OUTPUT
Counts only; secret values are never stored

🔍 Code Security Risk Assessment

Code vulnerabilities found by CodeQL, broken down by severity, language, and how many Copilot Autofix can fix.

SCOPE
Up to the 20 most active repos
RUNS
Once every 90 days
OUTPUT
Aggregated report; no Actions minutes consumed
  • 🛂 Only organization owners and security managers can run them
  • 🏷️ GitHub Team and GitHub Enterprise Cloud (Server support expected in 3.22)
  • 🧪 You can start a GHAS trial directly from the results ↗, which is the natural next step once you have the numbers

Rolling out across the enterprise

One configuration at Enterprise → Settings → Advanced Security → Code security rolls out to every org and repo. New configuration opens pre-filled with GitHub recommended.

You can now enforce enterprise security configurations across both new and existing repositories, preventing organization and repository admins from overriding those policies. September 15 announcement ↗

Block orgs that should not have itDo this firstDocs

Do thisEnterprise → Policies → Advanced Security → Policies tab → set the dropdown to Allow for selected organizations and keep only the orgs you want

Why firstDisallowing does not disable repos where it is already enabled. It only blocks additional repositories, so after rollout it is too late

Who it bindsRepository administrators only. Org owners and security managers can always enable it regardless of the policy

Push protection turns onblocks push onlyDocs

Blockedgit push, commits made in the GitHub UI, file uploads, REST API requests

Not blockedgit pull, git clone, git fetch. "Secret scanning will stop us pulling" is a misconception

Bypass is open to anyone with writedefault behaviorDocs

Defaultanyone with write access can bypass by picking a reason. Every bypass still leaves an alert, an audit log entry, and an email to owners

To restrictset Bypass privileges to Specific actors in the configuration (delegated bypass). Everyone else goes through a request and approval flow (requests expire after 7 days)

Code scanning runs on three triggersconsumes Actions minutesDocs

Whenevery push to the default or a protected branch, every PR creation and commit against those branches (fork PRs excluded), and a weekly schedule

Costthe dominant factor in an enterprise-wide rollout. Repos with no CodeQL-supported language use zero scans and zero minutes

Notecode scanning on its own never blocks a merge

Blocking merges needs a rulesetEnterprise → Policies → RulesetsDocs

WherePolicies → Repository → Rulesets → Require code scanning results

Blocks whenan alert at the configured severity, analysis running, or tool not configured

Trappoint it at repos without CodeQL and every PR is blocked even with zero alerts

What Evaluate isa dry run that records instead of blocking. Rule Insights shows what Active would have rejected. The others are Active and Disabled

Cover new repositoriesset via PolicyDocs

Do thisPolicy → Use as default for newly created repositories. Pick Enabled with advanced setup allowed for code scanning so existing CodeQL workflows survive

Scopenew repositories only. It does nothing to repositories that already exist

Cover existing repositoriesseparate Apply to actionDocs

Do thisfrom the configurations list, Apply to → All repositories without configurations

Enterprise onlyappears only at the enterprise level. Covers unconfigured repos without disturbing orgs that already have one

Enforcementset Policy → Enforce configuration to Enforce for repository and organization owners to block org and repo admins from overriding existing repos too (use Apply to → All repositories to enforce across all repos)

Scopearchived repos are included too, since secret scanning still runs on them

Pick specific repositoriesorg and enterprise configurationsDocs

Per repoEnterprise configurations can also be applied to selected repositories from the organization's repository list. The selection interface is at org level; the configuration does not have to be created there

HowOrganization → Settings → Advanced Security → Configurations → Repositories tab → filter and select repos → Apply configuration → choose the org or enterprise configuration → Apply

Who winsif an enterprise change conflicts with the org configuration the repo flips to removed_by_enterprise and the org config detaches. Enterprise wins

Which configuration is applied1 repo = 1 config (last applied wins)Docs

Core ruleno merging and no stacking: a repository has at most one configuration attached at a time. Applying another configuration replaces the current one without detaching first (detaching docs ↗). Detaching alone leaves already-enabled features on

Precedenceon existing repos, enterprise All repositories overwrites org choices (All repositories without configurations keeps them). For new repos, an enterprise-enforced enterprise default beats the org default for the same visibility (enforcement docs ↗). On conflict, the repo flips to removed_by_enterprise (statuses reference ↗)

Check in org UIOrganization → Settings → Advanced Security → Configurations → Repositories tab shows each repo's attached configuration name and status prefix (Enforced, Removed, No configuration), filterable by Configuration status (diagnosis guide ↗)

Check via APIget one repo's active config with GET /repos/{owner}/{repo}/code-security-configuration (REST API ↗), or list every repo on a config with GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories (plus the enterprise equivalent, REST API ↗)

Visualizing coverage 📖 Docs

DEMOSecurity overviewFOR PRESENTER ONLY
  1. ENTERPRISE LEVEL

    Open octodemo → Security overview ↗ and show the detection / remediation / prevention trends. Then switch to the Coverage and Risk views.

    Only orgs where you are owner or security manager are aggregated.

  2. ORGANIZATION LEVEL

    Open theomonfort-org → Security overview ↗ to show the same dashboard scoped to one org.

    This is the view teams use day to day.

  3. REPOSITORY LEVEL

    Drill down to one repository with ghas-test-1 → Security and quality ↗.

    Enterprise → Org → Repo: the same alerts, narrowed step by step.

Once the configuration is out, the question becomes “how far are we actually covered?” The Security and quality tab answers it at both Enterprise and Organization level.

ViewWhat it answersLevel
📊 OverviewDetection / remediation / prevention trendsEnt + Org
📈 CoverageWhich repos have which feature enabledEnt + Org
🛡️ RiskWhich repos carry the most alertsEnt + Org
🌐 Public monitoringSecrets your members leaked in public repos across GitHubEnt only
  • 🏢 Org-level Coverage is the day-to-day view — enterprise views only aggregate orgs where you are an owner or security manager
  • 🌐 Public monitoring (public preview, needs Secret Protection) attributes leaks by enterprise membership and verified domain. Turn it on at Enterprise → Settings → Advanced Security → Code security
  • 📤 Export CSV on Overview / Coverage / Risk keeps the filters you already applied
Slides 日本語