GitHub Advanced Security Study Strategy¶
Study Approach¶
Phase 1: Platform and Licensing (Week 1)¶
Goal: Understand what GHAS is, what it includes, and how it is licensed.
- Feature Inventory
- Code scanning (CodeQL + SARIF)
- Secret scanning, push protection, custom patterns, validity checks
- Dependency graph, Dependabot alerts, security updates, version updates
- Security advisories, Global Advisory Database
-
Security overview dashboards
-
Free vs Licensed
- Public repos: most features are free
- Private repos: code scanning and secret scanning require GHAS
-
Dependabot and dependency graph are free on private repos
-
Licensing Model
- GHAS is licensed per active committer
- Active committer: pushed a commit in the last 90 days to a GHAS-enabled repo
-
Committer counts once per enterprise regardless of repo count
-
Phase 1 Resources
- About GHAS
- GHAS Billing
- Security Configurations
Phase 2: Code Scanning Depth (Week 2-3)¶
Goal: Master code scanning configuration, CodeQL query suites, SARIF, and the alert lifecycle.
- Setup Options
- Default setup: no YAML, GitHub-managed
- Advanced setup: custom workflow with full control
-
Switching between the two
-
CodeQL
- Supported languages and build modes
- Query suites:
code-scanning,security-extended,security-and-quality - Custom queries and CodeQL packs
-
Local analysis with the CodeQL CLI
-
SARIF
- Upload from any third-party SAST tool
-
Required fields: ruleId, level, message, locations, partialFingerprints
-
Alert Lifecycle
- Open, fixed, dismissed (false positive, won't fix, used in tests)
- Branch protection integration via required status checks
-
Copilot Autofix for eligible plans
-
Phase 2 Resources
- Code Scanning Docs
- CodeQL Documentation
- SARIF Support
Phase 3: Secrets and Supply Chain (Week 4)¶
Goal: Understand secret scanning, push protection, Dependabot, and dependency review deeply.
- Secret Scanning
- Partner, GitHub, and custom patterns
- Validity checks where supported
-
Non-provider pattern detection (when enabled)
-
Push Protection
- Blocks pushes containing detected secrets
- Bypass reasons and audit events
-
Delegated bypass for controlled environments
-
Dependabot
- Alerts for known vulnerabilities in dependency graph
- Security updates vs version updates
-
dependabot.ymlsyntax and grouped updates -
Dependency Review
- PR UI showing dep changes
-
dependency-review-actionwith severity and license gating -
Phase 3 Resources
- Secret Scanning Docs
- Dependabot Docs
- Dependency Review
Phase 4: Advisories, Admin, and Review (Week 5-6)¶
Goal: Finish remaining domains and run mock exams.
- Security Advisories
- Repository advisories for coordinated disclosure
- CVE requests, private forks, publication
-
Global Advisory Database and how Dependabot consumes it
-
Private Vulnerability Reporting
- Enable at repo or org
-
Draft advisory creation for maintainers
-
Administration
- Security configurations for scale
- Security overview dashboards
-
REST API endpoints and webhooks
-
Phase 4 Resources
- Security Advisories
- Security Overview
- REST API for Security
Study Resources¶
Official GitHub Resources¶
- Code Security Docs - Complete reference
- GHAS Product Page - Product overview
- CodeQL Site - CodeQL learning
- GitHub Security Lab - Research and CodeQL examples
- GitHub Blog - Security - Updates
- GitHub Skills - Interactive courses
Free Learning Resources¶
- CodeQL Learning Lab - CodeQL query writing
- OWASP Top 10 - Vulnerability classes context
- MITRE CWE - Weakness enumeration
Practice Platforms¶
- A sandbox GitHub Enterprise Cloud trial org
- Deliberately vulnerable demo repos (e.g., github/codeql-action examples)
- Personal repos with intentionally inserted issues for practice
Exam Tactics¶
Question Strategy¶
- Identify the feature in scope - Is the question about code scanning, secret scanning, Dependabot, or advisory?
- Distinguish alert types - code scanning vs Dependabot vs secret scanning alerts behave differently
- Read YAML carefully - Many questions include small
dependabot.ymlor workflow snippets where a single field matters - Watch for licensing traps - Some features are free on public, GHAS on private
- Use terminology precisely - "partner pattern" vs "custom pattern" vs "GitHub pattern" are distinct
Time Management¶
- ~75 questions in 120 minutes = ~1.6 minutes per question
- First pass (80 minutes): answer confident items, flag the rest
- Second pass (30 minutes): revisit flagged
- Final (10 minutes): verify nothing is blank
- Cap any single question at 3 minutes on the first pass
Question Types to Expect¶
- YAML completion - Fill in a missing field in
dependabot.ymlor a CodeQL workflow - Alert triage - Given a scenario, what action is correct?
- Feature mapping - Which feature addresses this risk?
- Licensing - Does this scenario consume a seat?
- Configuration scope - Where is this configured: repo, org, enterprise?
Key Differentiators to Study¶
| Concept A | Concept B | Key Difference |
|---|---|---|
| Default setup | Advanced setup | Default is auto-managed; advanced is YAML workflow |
security-extended | security-and-quality | Extended adds lower-precision security; S&Q adds quality on top |
| Dependabot security updates | Dependabot version updates | Security are CVE-driven; version are schedule-driven |
| Partner pattern | Custom pattern | Partner is vendor-supplied; custom is customer-defined |
| Push protection bypass | Push protection denial | Bypass allows push with reason; denial is the default when detected |
| Repository advisory | Global Advisory Database | Repo advisory is coordination space; DB is public feed |
| Dependency graph | Dependabot alerts | Graph is the inventory; alerts are vulnerabilities against it |
| Code scanning | Secret scanning | Code scanning finds code issues; secret scanning finds credentials |
Common Pitfalls¶
Configuration Confusion¶
- Mixing default and advanced setup behaviors
- Forgetting that secret scanning push protection requires GHAS on private repos
- Using the wrong query suite name
- Missing required fields in
dependabot.yml
Licensing¶
- Thinking every GitHub user consumes a seat (only active committers do)
- Assuming public repos need GHAS for code scanning (they do not)
- Forgetting that Dependabot is free even on private repos
Alert Triage¶
- Dismissing alerts with the wrong reason (affects metrics and automation)
- Not understanding auto-dismiss rules for fixed alerts
- Confusing a closed secret scanning alert with a revoked credential
Administration¶
- Enabling features repo by repo instead of using security configurations
- Overlooking the security overview dashboard
- Forgetting that audit logs and webhooks exist for automation
Advisories¶
- Publishing a draft advisory prematurely
- Not requesting a CVE when appropriate
- Missing the private fork step in coordinated disclosure