Owasp bsi audit
Runs an OWASP ASVS/MASVS + BSI IT-Grundschutz security compliance audit (plus curated NIST SSDF/SLSA subsets) via orchestrated subagents, producing report.md/report.html and a fix plan. Usage: /owasp-bsi-audit <target-path>From its SKILL.md
npx -y skills add silvio-l/skills --skill owasp-bsi-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.6 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
OWASP + BSI IT-Grundschutz Audit
Audits like a human auditor would — only automated and more thorough: every control assessed individually, every verdict justified. The main context stays free because the actual assessment work goes to subagents that write their results to disk (see ORCHESTRATION.md). The BSI portion follows BSI-Standard 200-2 — Schutzbedarf is fixed at normal (Basis + Standard requirements) per this skill's design.
Report language note: the generated report.md/report.html/fix-plan.md are deliberately written in German — BSI IT-Grundschutz is a German standard with German normative vocabulary (MUSS/SOLLTE, Basis-/Standard-Anforderungen, Umsetzungsstatus ja/teilweise/nein/entbehrlich), and the audience for a Grundschutz-Check is German-speaking. This skill's own documentation (this file and its siblings) is English per repo convention; only the report output is German by design.
Flow
- Check catalog freshness. Read
catalog/SOURCES.md. Older than 90 days or a file is missing → runpython3 scripts/build_catalog.py(fetches the latest ASVS/MASVS/BSI/SSDF/SLSA editions, see below). Briefly tell the user if a refresh ran. - Confirm the target directory. If the user didn't name a path, ask or infer it from context. Create
<repo>/.audit-tmp/. - Structure analysis. One
Agentcall,model: haiku, following the prompt skeleton in ORCHESTRATION.md step 1. Result:.audit-tmp/profile.json. - Schutzbedarf + modeling. Directly in the main thread (small enough), following BSI-METHODIK.md Phase 2+3; write
.audit-tmp/methodik.json. Derive the list of candidate control groups from it. - Baustein/standard selection (confirm with the user). Present the candidate list from step 4 — grouped by standard (BSI Bausteine, ASVS chapters, MASVS groups if mobile targets were found, SSDF/SLSA groups if applicable) — and ask the user which ones to actually run this audit against, via
AskUserQuestion(multiSelect). Default selection = everything the modeling step proposed, but the user must confirm or adjust before dispatch; never silently run the full catalog without this checkpoint. This mirrors BSI-200-2's real-world practice of a human-reviewed Modellierung. Record the confirmed selection inmethodik.json(modellierung[].bausteinereflects only the confirmed set). - Fan-out / Grundschutz-Check. One
Agentcall per confirmed group,model: sonnet, following ORCHESTRATION.md step 3, in batches of 3–5 in parallel. Each writes.audit-tmp/findings/<group-id>.jsonand returns only a one-line summary. - Render.
python3 scripts/render_report.py .audit-tmp/ --html(always pass--htmlunless the user explicitly wants Markdown only). Producesreport.md,report.html,fix-plan.md— layout in REPORTING.md. - Wrap-up. Short summary (totals per standard, top findings) plus the three file paths, to the user. Don't paste the full findings into the chat — the files are the source of truth.
A run is done when: every confirmed control group has written a findings/<group-id>.json, render_report.py completed without error, and all three methodology-report sections (Strukturanalyse, Schutzbedarf, Grundschutz-Check) are non-empty.
Catalog scope
- ASVS 5.0 (L1+L2 = normal) — web backends, APIs.
- MASVS 2.1 — only when structure analysis finds Flutter/React Native targets.
- BSI Bausteine (Basis+Standard) — only the code-/config-checkable ones: CON.8, CON.10, APP.3.1, APP.3.2 (config-checkable parts), APP.4.3 (MySQL), APP.1.4 (mobile apps — only when mobile targets exist). Pure hosting/infrastructure requirements are tracked via
out_of_scope_reason, not dropped — details in BSI-METHODIK.md. Most of the BSI Kompendium's ~111 Bausteine (ISMS, ORP, OPS, NET, INF, IND layers) are organizational-governance or physical-infrastructure and were deliberately excluded — they don't fit a code audit for a solo developer or small team without a dedicated ops/security department. - NIST SSDF (curated, 5 of 65 practices) — only practices that are (a) not already covered by BSI CON.8/CON.10 or ASVS, (b) not the job of the separate
full-quality-scanskill (static analysis, dependency scanning), and (c) code-/config-checkable without a formal organizational process. SeeSSDF_SELECTED_IDSinbuild_catalog.py. - SLSA (curated, Build track only, 2 requirements) — supply-chain build integrity: hosted CI vs. manual builds, build provenance. The Source track is excluded (SLSA Level 4 requires two-party review, not achievable for a solo developer).
Important rules
- Every
Agentcall setsmodel:explicitly (haikufor recon,sonnetfor assessment) — never inherit the default. - BSI findings always use the vocabulary
ja/teilweise/nein/entbehrlich, with a mandatory justification forentbehrlichand fornein/teilweiseat Standard level (Basis requirements should beja). OWASP/SSDF/SLSA findings usepass/fail/partial/n_a. Schema:schema/finding.schema.json. - Read config values for real where possible (php.ini, security headers, .htaccess, TLS) — don't just assert them.
.audit-tmp/does not belong in the audited repo — don't commit it, just point the user to it at the end.
What ships with it: 12 files
282.3 KB alongside SKILL.md, 2 of them executable
catalog/
- asvs-5.0-web.json108.5 KB
- bsi-grundschutz-normal.json50.0 KB
- masvs-2.1-mobile.json4.8 KB
- slsa-build-curated.json1.4 KB
- SOURCES.md1.6 KB
- ssdf-1.1-curated.json2.2 KB
schema/
- finding.schema.json3.2 KB
scripts/
- build_catalog.pyruns24.3 KB
- render_report.pyruns68.2 KB
- BSI-METHODIK.md6.9 KB
- ORCHESTRATION.md6.0 KB
- REPORTING.md5.2 KB