Handoff — QA Review Security Baseline (สิ่งที่เหลือต้องทำ)
ผล multi-agent QA review 33 findings + checklist งานที่ต้อง apply
อัปเดต: 2026-07-02
Handoff — QA Review ชุดเอกสาร Security Baseline (advisor-substitute) + แผนเสริมให้ auditor-defensible
บันทึกเมื่อ: 2 กรกฎาคม 2026 · สถานะ: review เสร็จ ยังไม่ apply (user สั่ง “handoff ไว้ก่อน เดี๋ยวว่ากันอีกที”) AC ของงาน: Baseline ของ Backend Service ด้านความแข็งแรง/ความปลอดภัย — ให้เอาไปตอบผู้ตรวจ/ธนาคารได้ เอกสารเป้าหมายหลัก: SECURITY_BASELINE_TARGET_STATE.md (พร้อมเอกสารพี่น้อง 3 ไฟล์ในโฟลเดอร์เดียวกัน)
บริบท: session นี้ทำอะไรไป
- User (ผ่าน
/brainstorming) ขอให้ advisor ตรวจคุณภาพชุดเอกสาร security เทียบมาตรฐานองค์กร API-GL-001 V3.0 (PDF) + Azure landing-zone HLD (ภาพ) — AC = baseline ความปลอดภัย backend service advisor()tool ล่ม (unavailable — ลอง 3 ครั้ง ตรงกับที่ HANDOFF_SECURITY_MASTER_PLAN_REREVIEW.md บันทึกไว้ว่า dead มาหลาย session) → ใช้ fallback ที่ handoff เดิมกำหนด: multi-agent Workflow review- รัน Workflow
wpt7e1dx9(run idwf_51450bb6-755): 5 dimension reviewer อิสระ → merge/dedup → adversarial verify 2-lens/finding → synthesize — 73 agents, 0 error, 2.43M tokens - ผล: 42 raw → 33 canonical → 33 ผ่าน adversarial verify (100% survive เพราะ findings ล้วนอ้าง quote+file ตรงตัว verify ง่าย)
- User พักงาน apply ไว้ → สั่งทำ handoff นี้
หลักฐานผลเต็ม (full 33 findings + verifyReason + survivors):
C:\Users\SUPAKO~1\AppData\Local\Temp\claude\c--Source-Private-Atlas-docs\c987b237-88c9-4c54-a240-d591a3a01f4a\tasks\wpt7e1dx9.output
⚠️ เป็น OS temp — อาจถูกลบ. สรุป actionable ครบอยู่ด้านล่างนี้แล้ว ถ้าไฟล์หายใช้ด้านล่างได้เลย. Workflow script (rerun/resume ได้): C:\Users\supakornp\.claude\projects\c--Source-Private-Atlas-docs\c987b237-88c9-4c54-a240-d591a3a01f4a\workflows\scripts\security-baseline-doc-review-wf_51450bb6-755.js
คำตัดสินรวม (verdict)
ชุดเอกสาร พื้นฐานดี, evidence-driven, ซื่อสัตย์เรื่อง scope (§0 note บอกเองว่ารอบนี้ verify แค่ ④ UserService + ③ Package) — แต่ยังไม่ auditor-defensible เต็มตัว ต้องปิด gap ก่อนเสนอผู้ตรวจ. แก้ได้แบบ edit เฉพาะจุด ไม่ต้องรื้อโครง.
จุดแข็งที่ต้องรักษาไว้: โครง 7 หมวด API-GL-001 ชัด · claim ส่วนใหญ่มี file
· ใช้ UserService เป็น concrete template · ใช้ 🟡/“ต้อง confirm” hedge unknown แทนเดา ✅งานที่ต้อง apply (เรียงตาม severity) — ทั้งหมดแก้ที่ Baseline เว้นระบุ
🔴 must_fix (1)
- M-1 · APIM rate-limit over-claim — Baseline L130
✅ Bearer 200/60s, Anon 30/60sขัด Compliance L17rate-limit APIM ถูก comment out (SG-20). เป็นการโชว์ control ที่ปิดอยู่ว่า active ต่อผู้ตรวจ + ตัวเลข 200/60s ไม่มี source อื่นยืนยัน. แก้: ยืนยันสถานะจริงของ APIM policy ก่อน (edge global vs per-route อาจคนละตัว) → ถ้า commented out จริง เปลี่ยน ✅ เป็น 🟡/❌ ใน Baseline L130 + Roadmap L175 + อ้าง SG-20; เอาเลข 200/60s ออกหรือ mark “per HLD design intent, ยังไม่ enforce”. ห้ามให้ 3 เอกสารขัดกันเรื่อง control ที่ตอบผู้ตรวจ.
🟡 should_fix — ธีม A: Accuracy / over-claim
- A-1 · “fact-check 3 รอบ” (Baseline L11/L158) จริงมี 2 รอบ (Roadmap L7) → แก้เป็น “2 รอบ”, เก็บ count ที่ Roadmap ที่เดียวแล้ว reference
- A-2 · Sentinel หมวด 3 = ✅ (Baseline L78 “ไม่มี secret hardcode”) จริง Compliance L13 = 🔴 demo project EncryptionKey ค้าง git (SG-02c) + §0 บอกเองว่าไม่ได้ verify Sentinel → ลดเป็น 🟡 + caveat หรือ mark ”— (out of verified scope)”
- A-3 · “evidence file ทุก service” (Baseline L11/L158) จริง Roadmap mark หลายข้อ ⚠️/ต้อง confirm + ThirdPartyFX เดิมไม่อยู่ใน inventory → ลดถ้อยคำเป็น “evidence สำหรับข้อ verified; ข้อ ⚠️ ยังไม่ยืนยัน”
- A-4 · platform-edge ✅ ไม่มี provenance — เซลล์ WAF/DDoS/rate-limit ที่ขอบ (L90/92/129/130) อ้างจาก HLD diagram ไม่ได้ verify config จริง แต่โชว์ ✅ เท่ากับเซลล์ที่ verify จากโค้ด → เพิ่ม provenance legend (✅ code-verified · ◇ HLD/config-asserted · ~ assumed-convention) แล้ว re-tag
🟡 should_fix — ธีม B: Sub-control หายเทียบ API-GL-001 §7 (เพิ่มแถวใน checklist)
- B-1 · §1.2 Server authentication — ไม่มีแถวตรวจ upstream cert (CA/expiry/revocation/domain-match) → เพิ่มแถวหมวด 1 หรือ cross-ref หมวด 4 (Roadmap L150 ทำแล้ว)
- B-2 · §2 Object-level authorization — หมวด 2 มีแค่ function-level (แยก read/admin) ขาด own-data-only / BOLA / IDOR (Roadmap L130 มี) → เพิ่มแถว
- B-3 · §2 Replay/nonce — ขาด replay-attack protection (short-lived + nonce) ที่ §7(2) สั่งชัด (Roadmap L133 = 🟡) → เพิ่มแถว 🟡
- B-4 · §5.1 Data Validation/Injection — หมวด 5 ไม่มีแถว input/response validation + กัน SQLi/OS-command (Roadmap L157 = FluentValidation, EF parameterized ✅) → เพิ่มแถว ✅
- B-5 · §7.3 Response size/pagination — หมวด 7 มีแค่ “จำกัด request” ขาด response pagination (Roadmap L178 = 🟡) → เพิ่มแถว 🟡
- B-6 · §5.2 (nit) HTTP-verb allowlist + Content-Type validation หาย → เพิ่ม/รวมเป็นแถวเดียว
- B-7 · §3.1 (nit) ห้ามฝัง secret ใน API Specification (Swagger) ด้วย (Baseline L78 ครอบแค่ source/config) + PDPA destruction-evidence (Roadmap L146) หาย → ขยายถ้อยคำ/เพิ่มหมายเหตุ
🟡 should_fix — ธีม C: Infra-layer หายทั้งดง (เพิ่มหมวด/แถวใหม่)
- C-1 ·
TLS ทุก hop ✅เกินจริง (L90) — in-cluster ไม่มี mTLS/service mesh (IaC grep istio/linkerd = 0), gateway→pod/pod→pod ไม่เข้ารหัส → เปลี่ยนเป็น 🟡 (terminate/verify เฉพาะขอบ) - C-2 · NetworkPolicy default-deny / pod isolation / egress — ไม่มีเลย → เพิ่มแถว (สำคัญ: ปิด lateral movement ของ threat actor #2 ที่ Roadmap L105 ระบุเอง — Zero Trust B4)
- C-3 · Container/pod hardening (runAsNonRoot, readOnlyRootFilesystem, drop capabilities) — IaC ตั้งจริงแค่ ~3/13 service (centralized/fxcodex/orchestrator); แม่แบบ ④ UserService เองก็ไม่มี → เพิ่มแถว 🟡 + ชี้ให้ standardize ที่ base Dockerfile/manifest template
- C-4 · Key Vault access model — L78 มีแค่ “ReportToken ใน KV ✅” ขาด KV RBAC least-privilege / workload-identity (IaC มี azure.workload.identity=true + CSI ให้ credit ได้) / private-endpoint → เพิ่มแถวแยก
🟡 should_fix — ธีม D: Auth worst-case หายจากเอกสาร (survivorship bias)
- D-1 · เพิ่ม WorkflowService + ThirdPartyFXService เป็น worst-case exception ในหมวด 1 & 2 (Baseline grep 2 ชื่อนี้ = 0 hit):
- WorkflowService —
WorkFlow01.API/Program.cs:73-81registerBypassAuthHandlerเป็น auth scheme เดียว, guard แค่if(IsProduction()) throw→ active bypass ทุก non-prod (Dev/SIT/UAT) คืนRole=Adminให้ anonymous (แรงกว่าif(false)ของ UserService) - ThirdPartyFXService —
ThirdPartyFX01.API/Program.csไม่มีAddAuthentication/[Authorize]เลย (grep = 0),MapHub("/hubs/fx-rate")anonymous, CORSAllowAnyHeader/Method/Credentials→ ไม่มี control ใน 7 หมวดเลยแม้แต่ Production
- WorkflowService —
- D-2 · แก้ model “4 ตัวแทน → ยกทั้ง platform” (L5) — เป็น survivorship/best-case sampling (เลือก UserService ที่ทำถูกสุด); auditor คาดหวัง risk-based/worst-case → เติม caveat ว่าเป็น inductive generalization ที่พิสูจน์ได้เฉพาะ control ใน shared-lib code; per-service auth-registration/config/deployment ต้อง scan ครบ (ชี้ Roadmap); ตั้งชื่อ exception ที่รู้แล้ว (WF/ThirdPartyFX); พิจารณาเพิ่ม coverage table ~13 service ราย service
🟡 should_fix — ธีม E: Auditor-readiness (governance)
- E-1 · Document-control block — มีแค่ date+“Draft”; ขาด version/author/reviewer/approver sign-off/data-classification/review-cadence/changelog → เพิ่ม header + เลื่อนจาก Draft เป็น reviewed/approved ก่อนเสนอผู้ตรวจ
- E-2 · Owner/Target-date/Severity ต่อ gap — checklist มีแต่ status icon → เพิ่มคอลัมน์ Owner + Target date + Risk severity อย่างน้อยสำหรับ 5 ข้อใน §2 และทุก cell 🟡/❌ + pointer ไป Roadmap §5 phases
- E-3 · Requirement วัดผลไม่ได้ → แปลงเป็นเกณฑ์: max session idle/absolute TTL (แทน “720h 🟡”), cipher-suite allowlist (แทน “ควร audit”), Swagger-exposure test ต่อ env (แทน “ต้อง confirm”)
🔵 nits (ทำทีหลังได้)
- N-1 · WAF วางผิดหมวด — อยู่หมวด 4 (Secure Communication) ควรอยู่ หมวด 7.2 เท่านั้น (ซ้ำอยู่แล้ว L129); เติมแถว cert/mutual-auth ในหมวด 4 แทน
- N-2 · Circuit-breaker ✅ ประเมินแค่ Sentinel session-read; จุดที่ §7.1 เจตนา (ThirdParty→DGA/e-Gov external call) อยู่นอก 4 ตัวแทน → หมายเหตุ scope
- N-3 · Security-alerting 🟡 “ยังไม่เป็นระบบ” ไม่ attribute platform monitoring (Defender/App Insights/Azure Monitor ใน HLD) → แยก infra ✅ (ต้อง confirm เปิดใช้) vs security-rules 🟡
- N-4 · UserService dev-bypass
if(false)อยู่ที่AuthenticationExtensions.cs:38(ไม่ใช่ Program.cs) + ยัง ship dead bypass code + TODO ค้าง → เพิ่ม evidence pointer แม่น + flag ให้ลบ dead code - N-5 · ShowPII remediation (L108) — ShowPII เป็น hardcoded C# gated
!IsProduction()(PipelineExtensions.cs:123-126) ไม่ได้อยู่ใน Package (grep = 0) → เอา “Package” ออก; ปัญหาจริง = UserService diverge จาก template’sIsDevelopment()ไปเป็น!IsProduction(); fix = เปลี่ยนเป็นIsEnvironment('Local')หรือย้ายเป็น Package helper
Cross-doc reconcile (ถ้าเลือกแก้ทั้งชุด 4 ไฟล์)
- X-1 · Dead links — Compliance L5 ลิงก์
SECURITY_SCAN_FINDINGS.md+SECURITY_HARDENING_PLAN.mdที่ไม่มีจริง (Glob=0) → สร้างไฟล์ (SG-ID+file) หรือ repoint ไป Roadmap §3 Gap Register + inline evidence - X-2 · Handoff เดิม stale — HANDOFF_SECURITY_MASTER_PLAN_REREVIEW.md บอก round-2 “ยังไม่ apply” แต่ Roadmap L7 บอก apply แล้ว (M1/M5/M7/S4 integrate จริง) → mark handoff เดิมเป็น SUPERSEDED/DONE หรือย้าย archive
- X-3 · ID scheme — Roadmap ใช้ V-001/V-005/V-007, Compliance ใช้ SG-04/05 (V-001 = SG-04) ไม่มี mapping → เพิ่มตาราง map หรือรวม scheme
- X-4 · Compliance orphan — Baseline/Roadmap ไม่อ้าง Compliance เลย (grep=0) → เพิ่ม cross-ref + note ว่า ”✅ ใน Baseline = per-control, 0/7 ใน Compliance = per-category rollup” (คนละหน่วยวัด)
วิสัยทัศน์ “เอกสารเสริมกัน” (4-doc pyramid) — ที่ user ถามตรงๆ
| ไฟล์ | บทบาท | ต้องเสริม |
|---|---|---|
| Baseline | target-state summary (“good looks like”), scoped 4 ตัวแทน | ชี้ Roadmap เป็น worst-case/full register อย่างเด่น + inline worst specimen |
| Roadmap | full gap register + remediation ~13 service = แหล่งความจริง | เก็บ single-source metadata (round-count, inventory, applied-status) |
| Compliance Matrix | deep per-control audit ของ 1 ตัวแทน (Sentinel ②) | repoint dead links, ให้ Baseline/Roadmap อ้างถึง |
| Handoff (เดิม) | working/session state | mark superseded |
หลัก: single source of truth (metadata ซ้ำเก็บที่เดียว) + cross-ref ครบวง + unify ID + แยกหน่วยวัด + scope-boundary โปร่งใส (กันคนอ่าน Baseline เดี่ยวๆ แล้วเข้าใจ posture สูงกว่าจริง)
แนวทางที่แนะนำสำหรับ session หน้า
3 ทางที่เสนอ user (ยังไม่เลือก): (1) แก้ baseline ให้ auditor-defensible [แนะนำเป็นสเต็ปแรก] · (2) แก้ทั้งชุด 4 ไฟล์ให้ sync · (3) เขียน REVIEW report แยกไฟล์ แนะนำ: เริ่ม (1) ปิด M-1 + ธีม A–E ที่ Baseline ก่อน (ตรง AC ที่สุด) แล้วค่อยขยับ (2) reconcile cross-doc (X-1..X-4). ถ้า user อยากได้ evidence trail ค่อยทำ (3). สำคัญ: ต้อง verify APIM policy จริง (M-1) และ code claim ที่ยัง flag ก่อน apply — อย่าเชื่อเอกสารเดิมคำเดียว (ธีม A ทั้งหมดคือ over-claim ที่เคยหลุด).
Gotchas / environment notes
advisor()ตายทั้ง environment — ลอง 3 ครั้ง session นี้ก็ยัง unavailable. ถ้ายัง dead ให้ใช้ Workflow multi-agent review เป็น fallback (pattern ใน scriptwf_51450bb6-755— 5 dim → merge → 2-lens verify → synth; resume ได้ด้วยresumeFromRunId)- PDF ภาษาไทย (
API-GL-001...pdfที่C:\Users\supakornp\Downloads\) extract text เพี้ยน (font cp874 ไม่ map Unicode). วิธีที่ได้ผล:pip install pymupdfแล้ว render เป็น PNG (fitzmatrix 2.2x) → Read ภาพด้วยตา (Thai ชัด). Ground-truth §7 ที่ผม verify แล้วอยู่ที่ scratchpadapi-gl-001-groundtruth.md(⚠️ temp อาจถูกลบ — ถ้าหาย regenerate จากภาพหน้า 9-13) - Context files ที่ agent ใช้ (temp scratchpad, อาจถูกลบ):
api-gl-001-groundtruth.md(§7 ground-truth 7 หมวด),azure-hld-description.md(คำอธิบาย HLD). ถ้าจะทำต่อจริงจัง แนะนำ copy 2 ไฟล์นี้เข้าโฟลเดอร์ security/02072026/ ให้ persist - ไฟล์ทั้งหมดใน
security/02072026/ยัง untracked ใน git — ถาม user ก่อน commit - ทำงานภายใต้
/brainstorming(HARD-GATE: design ก่อน approve ก่อน apply) — session หน้าถ้า apply ควรผ่าน design/approval หรือ user สั่งชัด
Suggested skills สำหรับ session หน้า
- ถ้า user เลือกแก้เอกสาร (ทาง 1/2): ไม่ต้องใช้ skill พิเศษ — แก้ markdown ตรงๆ ด้วย Edit ตาม checklist ด้านบน (must_fix ก่อน). ก่อน apply M-1 และ code-claim ที่ flag ควร verify กับ code/policy จริงก่อน (
Grep/Readrepo หรือ APIM policy XML) - ถ้าต้องการ independent re-check หลังแก้:
advisor()(ลองก่อน เผื่อกลับมา) → ถ้ายัง dead ใช้Workflowresume จากwf_51450bb6-755(verify เฉพาะจุดที่แก้ ไม่ต้อง full re-review) - ถ้า user ขอสร้าง
SECURITY_SCAN_FINDINGS.md/SECURITY_HARDENING_PLAN.md(ที่ Compliance ลิงก์หาแต่ไม่มีจริง) = scope Sentinel Gateway แยก — เริ่มจากอ่านBackend_SentinelGatewayService/(มี SECURITY_REVIEW.md/CHECKLIST เดิม 04062026 ที่มี SG-ID ต่อยอดได้)
References
- เอกสารเป้าหมาย: SECURITY_BASELINE_TARGET_STATE.md · SECURITY_MASTER_PLAN_DEFENSE_ROADMAP.md · COMPLIANCE_MATRIX.md · HANDOFF_SECURITY_MASTER_PLAN_REREVIEW.md
- มาตรฐานองค์กร:
API-GL-001_API Guideline V3.0-2568.pdf(ที่C:\Users\supakornp\Downloads\) — §7 API Security Standard = 7 หมวด (Authentication · Authorization · Data Confidentiality & Integrity · Secure Communication · Secure Coding & Configuration · Audit Log & Monitoring · Resource Adequacy) - Workflow ผลเต็ม: task
wpt7e1dx9output (temp path ด้านบน) · scriptsecurity-baseline-doc-review-wf_51450bb6-755.js - ไม่มี hardcoded credential ค่าจริงถูกคัดลอกมาในเอกสารนี้ — อ้างเฉพาะ file