Audit keamanan berbasis standar (OWASP Top 10, OWASP ASVS, ISO/IEC 27001 Annex A) untuk AWCMS-Mini. Gunakan saat diminta "security hardening", audit OWASP/ASVS/ISO, penilaian kepatuhan, atau pengerasan menjelang go-live/audit eksternal. Berbeda dari awcms-mini-security-review (checklist DoD per modul) — skill ini memetakan kontrol ke kerangka standar industri.
Instalación
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Audit keamanan berbasis standar (OWASP Top 10, OWASP ASVS, ISO/IEC 27001 Annex A) untuk AWCMS-Mini. Gunakan saat diminta "security hardening", audit OWASP/ASVS/ISO, penilaian kepatuhan, atau pengerasan menjelang go-live/audit eksternal. Berbeda dari awcms-mini-security-review (checklist DoD per modul) — skill ini memetakan kontrol ke kerangka standar industri.
Sumber kebenaran: docs/awcms-mini/20_threat_model_security_architecture.md (STRIDE, kontrol berlapis, trust boundary, §Matrix kepatuhan OWASP/ASVS/ISO 27001 — matrix nyata dengan bukti per baris sudah ditulis di Issue #437, pakai sebagai template/precedent saat audit ulang atau menambah kontrol baru), docs/awcms-mini/10_template_kode_coding_standard.md (guardrail), dan docs/awcms-mini/13_final_master_index_traceability.md (matrix kontrol). Skill ini memetakan kontrol proyek ke kerangka standar; pakai bersama awcms-mini-security-review (checklist per modul) dan subagent awcms-mini-security-auditor.
OWASP Top 10 (2021) → kontrol di base
#
Kategori
Cek utama di AWCMS-Mini
A01
Broken Access Control
ABAC default-deny + deny-overrides (ADR-0004); RLS ENABLE+FORCE (ADR-0003); DB role non-superuser; WHERE id=<tenant> eksplisit pada tabel RLS-free (awcms_mini_tenants); IDOR — cek tiap resource difilter tenant/kepemilikan
A02
Cryptographic Failures
Password argon2id (Bun.password); token sesi opaque (hanya hash disimpan); identifier sensitif value_hash+masked_value; HTTPS di produksi; cookie HttpOnly/Secure/SameSite
A03
Injection
Query hanya via tagged template parametrik Bun.SQL (tak ada string-concat SQL); tx.unsafe/SET LOCAL hanya untuk nilai tervalidasi (assertUuid); validasi input tiap endpoint; output encoding (Astro auto-escape)
Secret hanya env; .env gitignored; CI menolak .env; security:readiness memblokir go-live (RLS FORCE, role bukan superuser); error tanpa stack trace; security response headers (src/lib/security/security-headers.ts, Issue #437 — X-Content-Type-Options/X-Frame-Options/Referrer-Policy/Permissions-Policy/HSTS prod-gated) + CSP native Astro security.csp (astro.config.mjs) di setiap response
Login lockout per-identitas setelah N gagal; pesan generik anti-enumeration; TTL sesi; revoke saat logout; rate limiting sumber+tenant (src/lib/security/rate-limit.ts, Issue #437 — menahan rotasi loginIdentifier dari sumber sama, reuse untuk endpoint publik/mahal lain via awcms-mini-integration). Anti-enumeration itu dua sisi (Issue #840, ASVS V2.2.1/WSTG-IDNT-04): body DAN waktu. Tiap deny yang bergantung pada apakah identitas ada wajib kolaps ke 401 AUTH_INVALID_CREDENTIALS + pesan identik (locked/password_login_disabled dulu bocor), DAN jalur "identitas tak ada" wajib tetap membayar argon2id (verifyPasswordOrDummy) — melewatinya terukur 4,13 ms vs 80,13 ms (~19x), oracle satu-request yang jauh lebih murah daripada beda body mana pun. Saat mengaudit endpoint auth publik baru: cek KEDUANYA, jangan berhenti di pesan errornya.
Audit high-risk + decision log + correlation ID (otomatis di meta.correlationId untuk semua endpoint /api/* sejak Issue #447, lihat awcms-mini-observability); log terstruktur; redaksi secret/PII wajib sebelum log; retensi/purge audit event (730 hari default) + extension point untuk export ke SIEM eksternal (Issue #447)
A10
SSRF
URL provider dari env tepercaya, bukan input user; provider di luar transaksi (ADR-0006)
OWASP ASVS (L1/L2 relevan)
V2 Auth — hashing modern, lockout, session fixation dicegah (token baru saat login), logout mencabut sesi.
V4 Access Control — default deny, cek per-request (bukan sekali), RLS defense-in-depth, tak ada IDOR.
V5 Validation/Encoding — validasi tiap input, output encoding, CSRF via Astro checkOrigin (wajib Content-Type pada mutation).
V7 Error/Logging — error aman tanpa detail internal; log tanpa data sensitif.
V9 Communications — TLS di produksi (HSTS Strict-Transport-Security prod-gated, Issue #437); HMAC untuk kanal mesin-ke-mesin (sync).
V12 Files — checksum diverifikasi; path/objek tak dari input tak tepercaya.
V14 HTTP Security Configuration — CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, HSTS (Issue #437, src/lib/security/security-headers.ts + astro.config.mjssecurity.csp). Gotcha CSP nyata: nonce per-request dihapus diam-diam oleh compiler Astro dari atribut is:inline; hash SHA-256 manual untuk satu skrip yang diketahui bisa melewatkan skrip/style lain yang Astro inline per-komponen tanpa diminta — verifikasi CSP wajib pakai browser sungguhan (headless-Chrome/CDP), curl tidak bisa mendeteksi pelanggaran CSP karena tak mengeksekusi JS/CSS.
ISO/IEC 27001:2022 Annex A (kontrol yang relevan ke kode)
A.5.15 access control · A.5.17 authentication info · A.8.2 privileged access (DB role least-privilege) · A.8.5 secure authentication · A.8.12 data leakage prevention (masking/redaction) · A.8.15 logging · A.8.16 monitoring (log terstruktur + extension point setLogSink/setAuditExportHook sejak Issue #447 — titik pemasangan SIEM eksternal, BUKAN implementasi SIEM nyata, itu tetap di luar cakupan base generik ini, lihat awcms-mini-observability) · A.8.24 cryptography · A.8.28 secure coding (guardrail doc 10) · A.8.31 separation of environments. Sisanya (kebijakan, personel, fisik) di luar cakupan kode base.
Cara kerja
Petakan tiap item ke bukti nyata di repo (query DB, panggilan fungsi domain, grep file) — bukan asumsi; pola sama seperti scripts/security-readiness.ts.
Tandai: terpenuhi / gap / di luar scope base. Temuan critical memblokir go-live.
Prioritaskan gap berdasarkan dampak (STRIDE/EoP & Info-disclosure paling tinggi).
Output
Matrix kepatuhan (kategori → status → bukti/lokasi → remediasi) + daftar temuan berperingkat critical→low + saran patch. Jalankan bun run security:readiness sebagai gate objektif.
Skill terkait
awcms-mini-security-review (checklist DoD per modul), awcms-mini-abac-guard, awcms-mini-audit-log, awcms-mini-observability (correlation ID, retensi, extension point A.8.16), awcms-mini-integration (rate limiting reuse), awcms-mini-sensitive-data, awcms-mini-sync-hmac, awcms-mini-production-preflight; subagent awcms-mini-security-auditor.