How SentinelOSS works
A technical walk-through of every scanner โ what it checks, how the scoring works, and what a real finding looks like.
The pipeline
When you push a commit, GitHub sends an HMAC-SHA256 signed webhook to SentinelOSS. We verify the signature, then run six scanners in parallel. Results are saved to your dashboard and dispatched to all configured notification channels.
git push origin main
โ
โผ HMAC-SHA256 verified
POST /api/webhooks/github/{orgId}
โ
โโ OSV batch query โ CVE database
โโ Qualys SSL Labs โ TLS grade
โโ GitHub Actions YAML โ supply chain
โโ HTTP HEAD request โ security headers
โโ npm registry lookup โ license check
โโ Anthropic Claude API โ code analysis (Guardian)
โ
โผ ~12 seconds later
Dashboard report + Slack + TelegramDependency CVE Scanner
SentinelOSS fetches your package-lock.json from GitHub and parses every dependency entry. Each package is submitted to the OSV batch API (POST /v1/querybatch) in a single request โ up to 999 packages per scan.
Data sources
- OSV.dev (aggregates NVD, GitHub Advisory DB, and 20+ sources)
- Ecosystems supported: npm, PyPI, Go, Rust, Maven, RubyGems
- Updated continuously โ typically within hours of disclosure
Severity mapping
- CRITICAL โ CVSS โฅ 9.0
- HIGH โ CVSS 7.0โ8.9
- MEDIUM โ CVSS 4.0โ6.9
- LOW โ CVSS < 4.0
// OSV batch request format
POST https://api.osv.dev/v1/querybatch
{
"queries": [
{ "version": "6.6.2", "package": { "name": "lodash", "ecosystem": "npm" } },
{ "version": "1.2.3", "package": { "name": "express", "ecosystem": "npm" } }
// ... up to 999 packages
]
}SSL / TLS Grade
SentinelOSS calls the Qualys SSL Labs API with fromCache=on for fast results. The hostname is derived from your repository's homepage URL or the host portion of your repo name.
What it checks
- TLS protocol versions (1.0, 1.1, 1.2, 1.3)
- Cipher suite strength (RC4, 3DES, EXPORT detection)
- HSTS header presence and max-age
- Certificate chain completeness and expiry
- POODLE, BEAST, DROWN, Heartbleed vulnerability checks
Grading
Supply Chain Analysis
SentinelOSS fetches every .github/workflows/*.yml file from your repo using the GitHub Contents API, then scans each line against 16 attack patterns across 4 severity levels.
Example findings
curl piped to shell โ remote code execution risk
.github/workflows/deploy.yml:24
eval in shell command โ code injection risk
.github/workflows/ci.yml:41
Action pinned to @main branch โ unpinned, supply chain risk
.github/workflows/test.yml:12
pull_request_target trigger โ can expose secrets to forks
.github/workflows/pr.yml:3
Self-hosted runner โ less isolated than GitHub-hosted
.github/workflows/build.yml:8
Risk score
CRITICAL +40 ยท HIGH +20 ยท MEDIUM +8 ยท LOW +2 ยท capped at 100
Risk level
CLEAN (0) ยท LOW (1โ7) ยท MEDIUM (8โ19) ยท HIGH (20โ39) ยท CRITICAL (40+)
Security Headers
SentinelOSS makes a HEAD request (falling back to GET) to https://{domain} and evaluates seven headers.
| Header | Points | Protects against |
|---|---|---|
| Strict-Transport-Security | 25 | SSL stripping, protocol downgrade |
| Content-Security-Policy | 25 | XSS, data injection attacks |
| X-Frame-Options | 15 | Clickjacking |
| X-Content-Type-Options | 15 | MIME sniffing attacks |
| Referrer-Policy | 10 | Information leakage |
| Permissions-Policy | 10 | Feature abuse (camera, mic, etc.) |
| X-XSS-Protection | 0 | Legacy โ replaced by CSP |
Grade = earned / 100 points: A+ (95+) ยท A (80+) ยท B (65+) ยท C (50+) ยท D (25+) ยท F (<25)
License Compliance
SentinelOSS queries the npm registry (GET registry.npmjs.org/{name}/latest) for up to 30 unique packages per scan and classifies each license by legal risk.
HIGH
GPL-2.0, GPL-3.0, AGPL-3.0, SSPL-1.0, BUSL-1.1
May require you to open-source your entire project
MEDIUM
LGPL-2.1, LGPL-3.0, MPL-2.0, CDDL, EPL-2.0
Copyleft applies to the library itself, not your code
OK
MIT, Apache-2.0, BSD-2/3, ISC, 0BSD, Unlicense
Permissive โ use freely in proprietary software
Guardian โ AI Code Analysis
Claude AIGuardian fetches the commit diff from GitHub and passes it to Anthropic's Claude API. The model reviews added lines for security threats and returns structured JSON findings.
What Claude looks for
- Backdoors and persistence mechanisms
- Hardcoded secrets, tokens, and API keys
- Obfuscated or encoded payloads
- Mass file deletion or data destruction
- Suspicious outbound URLs and DNS lookups
- Supply chain injection in scripts
Risk score
CRITICAL findings: +40 each ยท HIGH: +20 ยท MEDIUM: +8 ยท LOW: +2
Output
Per-finding: severity ยท type ยท file ยท line number ยท code snippet ยท AI summary
// Guardian response example
{
"overallRisk": "HIGH",
"riskScore": 22,
"findings": [
{
"severity": "HIGH",
"type": "SECRET",
"file": "src/config.js",
"line": 14,
"label": "Hardcoded API key detected",
"snippet": "const API_KEY = 'sk-live-xxxxxxxxxxx';"
}
],
"aiSummary": "Commit adds hardcoded credential in config.js line 14."
}Notifications
After every scan, SentinelOSS dispatches notifications in parallel to all configured channels. Each channel type uses a different message format.
Slack
Plain text with mrkdwn formatting. Stored as https://hooks.slack.com/โฆ
Microsoft Teams
Adaptive Card with FactSet. Stored as the Teams Incoming Webhook URL.
Telegram
Markdown message via Bot API. Stored as telegram://TOKEN/CHAT_ID
Ready to connect your first repo?
Takes 3 minutes. No agents, no CI changes, just a webhook.
Get started free โ