12.5 · Critical findings addendum (Deep Redo 2026-07)
บทนี้เป็น addendum ของ 12.3 หลัง DEEP REDO ของ per-service scorecards (Wave 1–2) — finding ใหม่หรือที่ยกระดับเป็น Critical จากหลักฐาน file:line ที่ลึกกว่า shallow pass เดิม
อย่าใช้ตัวเลข 48 จาก 12.3 เป็น canonical อีกต่อไป — ตารางด้านล่างคือ Critical ชุดใหม่ที่ต้อง reconcile เข้า master register ใน Volume 17
สรุปจำนวน (post deep-redo, partial)
| Group | Critical เพิ่ม/ยืนยันใหม่ (ตัวอย่าง) |
|---|---|
| Legacy core | SEC-VTRC-API-01..04 (deep scorecard 590 บรรทัด) |
| Frontends | SEC-VTRC-RC-01..05, SEC-VTRC-WEB-01..04 |
| 2way | SEC-2WAYAPI-01..04, SEC-2WAYVTRC-01..03/07/08 |
| Domain | SEC-BENEFIT-01..05, SEC-RECRUIT-01..03, SEC-PMS-01..02, SEC-AIRECRUIT-01..02, SEC-CHAT-01/04, SEC-WORKFLOW-01..02, SEC-COMMON-01/03 |
| Meeting | SEC-MTVTRC-01/02/05/06 |
| Scheduler/SSO | SEC-JOBSCHED-01..02, CORR-SSO-01 (auth broken) |
Backdoor / bypass cluster (ต้องแก้ก่อน)
| ID | Repo | Evidence | Impact |
|---|---|---|---|
SEC-2WAYAPI-01 | 2way-api | hardcode i3admin login → JWT admin 48h | full admin without SSO |
SEC-2WAYVTRC-01 | 2way-vtrc-api | bypass token "testnaja" | skip auth on middleware |
SEC-CU-04 | cu-central-api | /auth/signinbypass | passwordless signin live |
CRIT-03 | centralize-api | @Public() ทุก route | auth machinery dead |
SEC-MTVTRC-05 | meeting-vtrc-api | global /meeting/secure/* auth commented | API surface open |
SEC-BENEFIT-03 | benefit-api | @Public() wdHospitals CRUD | medical claim without login |
SEC-PMS-01 | pms-api | @Public() salary endpoints | salary leak |
SEC-RECRUIT-03 | recruitment-api | @Public() import_blacklist | blacklist import open |
Secrets-in-git cluster (rotate พร้อมกัน)
| ID | Repo | What's leaked |
|---|---|---|
SEC-BENEFIT-01 | benefit-api | MSSQL ×3 + JWT + SFTP password hardcode |
SEC-RECRUIT-01 | recruitment-api | MSSQL + JWT + SMTP + reCAPTCHA + GCP SA |
SEC-AIRECRUIT-01 | ai-recruitment-api | OpenAI/remove.bg keys + DB |
SEC-PMS-02 | pms-api | shared JWT secret + UAT creds |
SEC-CHAT-04 | chat-center-api | prod/UAT .env |
SEC-COMMON-03 | vtrc-common | .env + Docker bake |
SEC-JOBSCHED-01 | job-scheduler-api | .env with sa password |
SEC-MTVTRC-01 | meeting-vtrc-api | .env* plaintext |
SEC-2WAYVTRC-03 | 2way-vtrc-api | Mongo + MSSQL sa in source |
SEC-VTRC-RC-01 | vtrc-rc-backoffice | Stimulsoft conn + AES key |
Shared JWT pattern: benefit-api / recruitment-api / ai-recruitment-api / pms-api ใช้ SECRET_KEY ชุดเดียวกัน — rotate ต้องพร้อมกัน (ดู runbook §2)
SQL injection cluster
| ID | Repo | Evidence |
|---|---|---|
SEC-VTRC-API-07 / SEC-BENEFIT-02 | vtrc-api / benefit-api | template literal raw SQL |
SEC-2WAYAPI-03 | 2way-api | announces/surveys/complaints |
SEC-RECRUIT-02 | recruitment-api | dynamic EXEC AI compare |
SEC-CHAT-01 | chat-center-api | rooms/tags query string |
SEC-COMMON-02 | vtrc-common | address provCode/amphCode |
approvedisaster.service.ts:415-417 | benefit-api | empCode = ${query.approverEmpCode} ไม่มี quote |
Command injection / dangerous exec
| ID | Repo | Evidence |
|---|---|---|
SEC-VTRC-API-01 | vtrc-api | execSync(qpdf --encrypt ${passwordPDF}...) ×5 |
SEC-VTRC-API-03 | vtrc-api | /webdeployment shell binary |
Frontend token-in-URL / XSS
| ID | Repo | Evidence |
|---|---|---|
SEC-VTRC-RC-02 | vtrc-rc-backoffice | /pathLogin/:token/:refreshToken |
SEC-BONEW-01 | vtrc-backoffice-new | token in URL path |
SEC-VTRC-WEB-02 / SEC-VTRC-RC-04 | web/rc-bo | dangerouslySetInnerHTML |
Broken auth design (ไม่ใช่ bypass แต่ flow พัง)
| ID | Repo | Evidence |
|---|---|---|
CORR-SSO-01 | sso-api | JWT sign() commented + JwtService not injected |
SEC-2WAYAPI-05 | 2way-api | ignoreExpiration: true |
SEC-WORKFLOW-01 | workflow-api | ไม่ verify JWT; role จาก sourceDB |
SEC-AIRECRUIT-02 | ai-recruitment-api | signature only — no role |
SEC-JOBSCHED-02 | job-scheduler-api | cron POST ไม่มี auth |
ROI — ลำดับแก้ระดับแพลตฟอร์ม
- Rotate ทุก secret ที่หลุดใน git (secrets cluster) +
git filter-repo - ลบ backdoor (
i3admin,testnaja,signinbypass) + ปิด@Public()ที่ write/PII - Parameterized SQL ทั้ง injection cluster
- แทนที่
execSyncqpdf (SEC-VTRC-API-01) - SSO redesign — ออก JWT จริงหรือลบ guard ที่ทำให้ 2FA พัง (CORR-SSO-01)
- HttpOnly cookie / CSP / dompurify ฝั่ง frontend
สิ่งที่ยังต้อง reconcile
- Volume 17 master register ยังอ้าง 275 items จาก shallow pass — ต้องนับใหม่หลัง mobile/OCR agents เสร็จ
- Volume 18 security review ต้อง import ตารางนี้เป็น input
- Finding ID ที่ซ้ำชื่อข้าม shallow vs deep (เช่น
C1vsSEC-VTRC-RC-01) — ใช้ deep ID เป็น canonical
ไป 12.3 (legacy table) หรือ Volume 17 →