วิธีตรวจหาช่องโหว่ใน Repo ฟรี

เครื่องมือสแกนฟรีสามารถตรวจจับ dependencies ที่มีช่องโหว่ ข้อมูลลับที่รั่วไหล และบั๊กประเภท injection ได้ เราได้นำเครื่องมือ 6 ตัวมาทดสอบกับ test repo พร้อมสาธิตวิธีทดสอบช่องโหว่ด้าน authorization ที่ทุกตัวตรวจไม่พบ

Ashley Innocent

Ashley Innocent

5 November 2026

วิธีตรวจหาช่องโหว่ใน Repo ฟรี

Apidog สำหรับองค์กร

การติดตั้งแบบ On-Premises

SSO & RBAC

รองรับมาตรฐาน SOC 2

สำรวจ Apidog Enterprise

หากต้องการตรวจหาช่องโหว่ใน repo ของคุณได้ฟรี ให้ใช้เครื่องมือซ้อนกัน 3 ระดับ ได้แก่ เครื่องมือสแกน dependency (npm audit, pip-audit หรือ OSV-Scanner), เครื่องมือสแกน secret (Gitleaks) และเครื่องมือสแกนโค้ด (Semgrep Community Edition) ให้รันเครื่องมือเหล่านี้ในทุก ๆ pull request โดยไม่มีเครื่องมือใดตรวจพบการลืมตรวจสอบสิทธิ์ (authorization check) ได้ ดังนั้นจึงควรเพิ่ม runtime test สำหรับกรณีนี้เข้าไปด้วย

npm audit --audit-level=high
pip-audit -r requirements.txt
gitleaks git . --no-banner
semgrep scan --config p/default --metrics=off --error

สิ่งที่ Vercel Security Review เปลี่ยนแปลงไป

Vercel Security Review เป็นความสามารถหนึ่งของ Vercel Agent ซึ่งเปิดให้ทดสอบแบบ public beta ตั้งแต่วันที่ 2 พฤศจิกายน 2026 โดยจะสแกนทุกการ push ไปยัง GitHub repo ที่เชื่อมต่อไว้ ตรวจสอบ diff และโค้ดโดยรอบ ติดตามเส้นทางว่าการเปลี่ยนแปลงนั้นสามารถเข้าถึงได้อย่างไร และตรวจสอบสิ่งที่พบซ้ำอีกครั้งก่อนที่จะรายงานผล

ตัวอย่างของ Vercel คือที่มาของบทความนี้ การเปลี่ยนแปลงใน endpoint สำหรับใบแจ้งหนี้ (invoice) ทำการค้นหาใบแจ้งหนี้ตาม ID โดยไม่ได้ตรวจสอบองค์กร ทำให้ผู้ใช้ทุกคนที่เข้าสู่ระบบสามารถดาวน์โหลดใบแจ้งหนี้ขององค์กรอื่นได้ ซึ่งถือเป็นข้อผิดพลาดเชิงตรรกะ (logic flaw) และเครื่องมือสแกนแบบจับคู่รูปแบบทั่วไปมักจะตรวจจับข้อผิดพลาดเชิงตรรกะเช่นนี้ได้ยาก

ใครบ้างที่สามารถใช้งานได้:

คำถาม คำตอบ
แพ็กเกจที่รองรับ เฉพาะทีม Pro และ Enterprise เท่านั้น
ค่าใช้จ่าย ฟรีจนถึงวันที่ 10 พฤศจิกายน 2026 หลังจากนั้นคิดตามอัตราโทเค็นของผู้ให้บริการบวกเพิ่ม $0.25 ต่อ 1 ล้านโทเค็น
Repo ที่รองรับ GitHub repo ที่เชื่อมต่อไว้ สำหรับ repo ที่ไม่ได้ deploy บน Vercel ยังไม่รองรับในขณะนี้
ขอบเขต ตรวจสอบเฉพาะ diff เทียบกับ base หรือตรวจซอร์สโค้ดทั้งหมดในการรีวิวครั้งแรก
ช่องทางการรายงานผล แดชบอร์ดช่องโหว่, การตรวจสอบผ่าน GitHub check และคอมเมนต์ใน PR สำหรับ private repo และ internal repo

เอกสารของ Vercel ยังระบุถึงข้อจำกัดไว้ด้วยว่า เครื่องมือนี้จะวิเคราะห์เฉพาะโค้ด ไม่ได้วิเคราะห์แอปพลิเคชันขณะทำงานจริง และไม่ใช่การทดสอบเจาะระบบ (penetration test) หากคุณไม่มีสิทธิ์ใช้งาน หรือกำลังอ่านบทความนี้หลังจากหมดช่วงให้ใช้งานฟรีแล้ว แนวทางที่เหลือในคู่มือนี้จะไม่มีค่าใช้จ่ายใด ๆ ทั้งสิ้น

การสแกนช่องโหว่ใน Repo ควรครอบคลุมอะไรบ้าง

การสแกนช่องโหว่ใน repo อย่างครบถ้วนควรตรวจสอบ 4 ส่วน ได้แก่ ช่องโหว่ที่ทราบแล้วใน dependency, ข้อมูลยืนยันตัวตน (credentials) ที่ commit เข้า Git, รูปแบบโค้ดที่ไม่ปลอดภัย เช่น injection และตรรกะการตรวจสอบสิทธิ์ (authorization) โดย 3 ส่วนแรกมีเครื่องมือสแกนฟรีที่พัฒนามาอย่างสมบูรณ์แล้ว ส่วนอย่างที่สี่จะขึ้นอยู่กับความหมายเชิงตรรกะของโค้ด จึงจำเป็นต้องใช้การทดสอบกับ API ที่กำลังทำงานอยู่จริง

Four stacked layers of a repo scan: dependencies, secrets and code patterns each have free scanners, while authorization logic needs a runtime test

คีย์ที่ถูกลบออกไปแล้วจะยังคงหลงเหลืออยู่ในประวัติของ Git ดังนั้นจึงควรสแกนประวัติย้อนหลังและทำการ rotate คีย์จริงทั้งหมด สำหรับคีย์ที่อยู่ในทราฟฟิกของ API และใน test collection สามารถดูได้จากคู่มือการตรวจสอบการรั่วไหลของ API key ของเรา

เปรียบเทียบเครื่องมือสแกนช่องโหว่ฟรี

ราคาและสิทธิ์การใช้งาน (license) ได้รับการตรวจสอบเมื่อวันที่ 5 พฤศจิกายน 2026 โดยเครื่องมือแบบ command-line ทั้งหมดในคู่มือนี้ไม่จำเป็นต้องมีบัญชีหรือผูกบัตรเครดิตในการรันคำสั่งแต่อย่างใด

เครื่องมือ สิ่งที่ตรวจพบ ค่าใช้จ่ายและสิทธิ์การใช้งาน ข้อควรระวัง
npm audit ช่องโหว่ของ dependency ใน npm ฟรี มาพร้อมกับ npm จำเป็นต้องมี lockfile
pip-audit ช่องโหว่ของ dependency ใน Python ฟรี, Apache-2.0 รองรับเฉพาะ Python เท่านั้น
OSV-Scanner ช่องโหว่ของ dependency ข้ามระบบนิเวศต่าง ๆ ฟรี, Apache-2.0 รายงานผลมากกว่า จึงต้องเตรียมคัดกรองข้อมูล
Trivy Dependency, secret, การตั้งค่าที่ไม่ปลอดภัย ฟรี, Apache-2.0 ควรล็อกเวอร์ชันไว้ให้เจาะจง (ดูรายละเอียดด้านล่าง)
Gitleaks Secret ในประวัติของ Git ฟรี, MIT การใช้งานผ่าน GitHub Action จำเป็นต้องมี license key แบบฟรีสำหรับองค์กร
Semgrep Community Edition รูปแบบโค้ด และ secret บางส่วน ฟรี, เอนจิน LGPL-2.1 ไม่สามารถติดตามข้อมูลข้ามฟังก์ชันหรือข้ามไฟล์ได้
Dependabot alerts ช่องโหว่ของ dependency ฟรีทั้งบน public และ private repo รองรับเฉพาะ GitHub เท่านั้น
GitHub secret scanning Secret ฟรีบน public repo; $19 ต่อ active committer ต่อเดือนสำหรับ private repo Private repo ต้องเปิดใช้งาน Secret Protection
CodeQL รูปแบบโค้ด ฟรีบน public repo; $30 ต่อ active committer ต่อเดือนสำหรับ private repo Private repo ต้องเปิดใช้งาน Code Security

ข้อสังเกตเกี่ยวกับสิทธิ์การใช้งานสองประการ: กฎสำหรับคอมมูนิตี้ของ Semgrep ใช้สัญญาอนุญาต Semgrep Rules License ซึ่งอนุญาตให้ใช้งานภายในองค์กรได้ แต่ไม่อนุญาตให้นำไปเผยแพร่ต่อหรือให้บริการในรูปแบบ service และหากคุณนำ Trivy มาใช้งาน โปรดอ่าน CVE-2026-33634 เนื่องจากผู้โจมตีเคยเข้าแทรกแซงบางส่วนของระบบนิเวศ Trivy ในช่วงสั้น ๆ เมื่อเดือนมีนาคม 2026 ดังนั้นควรใช้งานเวอร์ชันปัจจุบันและล็อก action ต่าง ๆ ไว้กับ commit SHA เสมอ

สแกน Repo ด้วยไม่กี่คำสั่ง: สิ่งที่เราค้นพบ

เราได้สร้าง Express API สำหรับใบแจ้งหนี้ขนาดเล็กขึ้นมาและ commit ลงใน local repo ซึ่งมี npm dependency 4 ตัวและ Python dependency 3 ตัวที่เป็นเวอร์ชันเก่า พร้อมทั้งคีย์จำลอง 2 รายการ (รูปแบบ Stripe 1 รายการ และรูปแบบ AWS 1 รายการ), ช่องโหว่ SQL injection, command injection และ route ที่ส่งคืนใบแจ้งหนี้ขององค์กรใดก็ได้ให้กับผู้ใช้ทุกคนที่เข้าสู่ระบบ

จากนั้นเราได้รันเครื่องมือแต่ละตัวบน macOS เมื่อวันที่ 5 พฤศจิกายน 2026:

npm audit
pip-audit -r requirements.txt --no-deps --disable-pip
osv-scanner scan source -r .
trivy fs --scanners vuln,secret .
gitleaks git . --no-banner
semgrep scan --config p/default --metrics=off
semgrep scan --config p/nodejsscan --metrics=off
เครื่องมือ (เวอร์ชัน) สิ่งที่ตรวจพบ สิ่งที่ตรวจไม่พบ
npm audit (npm 11.12.1) แพ็กเกจที่มีช่องโหว่ 9 รายการ: high 6 รายการ, low 3 รายการ ทุกสิ่งที่ไม่ใช่แพ็กเกจของ npm
pip-audit 2.10.1 คำแนะนำด้านความปลอดภัย (advisory) 16 รายการ จาก 3 แพ็กเกจที่ระบุ Transitive package เนื่องจากเราใส่แฟล็ก --no-deps
OSV-Scanner 2.7.0 คำแนะนำด้านความปลอดภัยที่ไม่ซ้ำกัน 66 รายการ จาก 15 แพ็กเกจ ซึ่งรวมถึง transitive package ของ Python ด้วย Secret และข้อผิดพลาดในโค้ด
Trivy 0.76.1 สิ่งที่พบใน dependency 33 รายการ และคีย์รูปแบบ Stripe คีย์รูปแบบ AWS
Gitleaks 8.30.1 คีย์รูปแบบ Stripe คีย์รูปแบบ AWS
Semgrep 1.183.0, p/default คีย์รูปแบบ Stripe, command injection และข้อความเตือนเรื่องไม่มี CSRF middleware SQL injection, คีย์รูปแบบ AWS
Semgrep 1.183.0, p/nodejsscan SQL injection, command injection, คีย์รูปแบบ AWS คีย์รูปแบบ Stripe

มีข้อสังเกตที่น่าสนใจ 3 ประการ:

ไม่มีเครื่องมือใดเลยที่แจ้งเตือนเกี่ยวกับ route ใบแจ้งหนี้ เนื่องจากนี่เป็นเพียง repo จำลองขนาดเล็ก จึงควรพิจารณาเพื่อเป็นตัวอย่างสาธิต ไม่ใช่เกณฑ์มาตรฐาน (benchmark) และเราไม่ได้รัน CodeQL ในการทดสอบนี้

สแกน GitHub Repo ของคุณในทุก ๆ Pull Request

GitHub-hosted runner แบบมาตรฐานนั้นใช้งานได้ฟรีบน public repo สำหรับ private repo นั้น GitHub Free จะมีวงเงินให้ $12 ต่อเดือน ซึ่งเทียบเท่ากับประมาณ 2,000 นาทีสำหรับ Linux runner แบบ 2-core ตามอัตราที่ระบุ เวิร์กโฟลว์นี้ใช้คำสั่งทั่วไป ทำให้องค์กรต่าง ๆ ไม่จำเป็นต้องใช้ license key สำหรับ Gitleaks Action:

name: repo-scan
on:
  pull_request:
  push:
    branches: [main]
permissions:
  contents: read
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7 # pin to a commit SHA
        with:
          fetch-depth: 0
      - name: Dependencies (npm)
        run: npm audit --audit-level=high
      - name: Dependencies (Python)
        run: pipx run pip-audit -r requirements.txt
      - name: Secrets
        run: |
          curl -sSL https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz | tar xz gitleaks
          ./gitleaks git . --no-banner
      - name: Code patterns
        run: pipx run semgrep scan --config p/default --config p/nodejsscan --metrics=off --error

เครื่องมือสแกนทั้งสี่ตัวจบการทำงานด้วย exit code 1 บน repo ทดสอบของเรา ซึ่ง exit code ที่ไม่ใช่ 0 จะทำให้ขั้นตอนการทำงานล้มเหลวทันที คุณสามารถนำขั้นตอนที่ไม่ได้ใช้ในโปรเจกต์ของคุณออกได้ สำหรับการทดสอบ API ใน pipeline เดียวกันนี้ สามารถดูเพิ่มเติมได้ที่ Apidog CLI ร่วมกับ GitHub Actions

อย่าลืมเปิดใช้งาน Dependabot alerts ด้วยเช่นกัน เพราะใช้งานได้ฟรีในทุกแพ็กเกจและไม่ต้องรอให้มี pull request

ช่องโหว่ที่หลุดรอด: บั๊กด้านสิทธิ์การเข้าถึง (Authorization) ที่เครื่องมือสแกนตรวจไม่พบ

บั๊กด้านการตรวจสอบสิทธิ์เป็นเรื่องยากสำหรับเครื่องมือสแกนแบบจับคู่รูปแบบ เนื่องจากโค้ดดูถูกต้องสมบูรณ์ ทั้งคำสั่ง query ที่ถูกต้อง พารามิเตอร์ที่ถูกต้อง และมี auth middleware ป้องกันอยู่ด้านหน้า ข้อผิดพลาดที่แท้จริงคือเงื่อนไขที่ขาดหายไป ซึ่งมีเพียง data model ของคุณเท่านั้นที่ระบุได้ว่าควรมีเงื่อนไขนั้นอยู่

// Every scanner passed this
db.query("SELECT * FROM invoices WHERE id = $1", [req.params.id]);

// The fix: scope the lookup to the caller's organization
db.query("SELECT * FROM invoices WHERE id = $1 AND org_id = $2",
  [req.params.id, req.user.orgId]);

นี่คือช่องโหว่ Broken Object Level Authorization ซึ่งครองอันดับหนึ่งใน OWASP API Security Top 10 2023 โดย OWASP แนะนำให้ตรวจสอบสิทธิ์การเข้าถึงในทุกคำขอที่ใช้ ID ที่ฝั่งไคลเอนต์ส่งเข้ามา และเขียนแบบทดสอบเพื่อดักจับข้อผิดพลาดด้านสิทธิ์การเข้าถึงก่อนที่จะนำขึ้นสู่ระบบจริง

การให้ coding agent ช่วยตรวจสอบสามารถช่วยได้ เราได้ลองลบคอมเมนต์ออกจาก repo ทดสอบ แล้วให้ Claude Code ช่วยรีวิวโค้ด ทั้งแบบที่ให้คำใบ้และไม่ให้คำใบ้เกี่ยวกับองค์กร ซึ่งระบบตรวจพบและแจ้งเตือนเกี่ยวกับ route ใบแจ้งหนี้ทั้งสองครั้ง อย่างไรก็ตาม วิธีนี้ไม่ได้ฟรีอย่างสมบูรณ์ เพราะต้องใช้วงเงินตามแพ็กเกจของ agent ของคุณ และผลลัพธ์อาจแตกต่างกันไปในแต่ละครั้งที่รัน

การเขียนแบบทดสอบจะให้คำตอบที่ชัดเจนว่าผ่านหรือไม่ในทุก ๆ pull request สำหรับการทดสอบความปลอดภัยให้ครอบคลุมฝั่ง API สามารถดูได้ที่การตรวจหาช่องโหว่ของ API แบบอัตโนมัติ, บทความรวมเครื่องมือสแกนความปลอดภัยของ API และเช็กลิสต์การทดสอบความปลอดภัยของ API ของเรา

ให้ Coding Agent ทดสอบสิทธิ์การเข้าถึงด้วย Apidog CLI

ไม่ต้องเสียเวลาเขียนแบบทดสอบนี้ด้วยตนเองสำหรับทุก route ให้ coding agent จัดการแทนด้วย Apidog CLI ซึ่งจะอ่าน route ทั้งหมดของคุณ สร้างแบบทดสอบสำหรับแต่ละรีซอร์สที่ได้รับการปกป้อง และสร้าง test suite ที่พร้อมนำไปรันใน CI ให้ทันที โดย Apidog Free รองรับผู้ใช้สูงสุด 4 คน

npm install -g apidog-cli@latest
apidog auth login --with-token <YOUR_TOKEN>
apidog skill install

คุณจะต้องมี test environment ที่เตรียมข้อมูลจำลอง (seed) ไว้ 2 องค์กร และมีผู้ใช้ 1 คนในแต่ละองค์กร จากนั้นป้อน prompt ให้กับ agent ของคุณ:

Read the routes in src/. For each route that returns data owned by an
organization, create an Apidog test scenario in project <id>: log in as
the Org A test user, request an Org B resource by ID, and assert the
status is 403 or 404. Add an Org A request for its own resource and
assert 200, so a broken login can't pass. Group the scenarios in a test
suite, run it against the staging environment, and summarize failures.

Agent จะตรวจสอบโครงสร้างของ payload สร้าง scenario ต่าง ๆ และรันชุดทดสอบให้โดยอัตโนมัติ:

apidog cli-schema get test-scenario-create
apidog cli-schema validate test-scenario-create --file scenario.json
apidog test-scenario create --project <id> --file scenario.json
apidog test-scenario import-steps <scenarioId> --project <id> --source endpoint --ids <endpointIds>
apidog test-suite create --project <id> --file suite.json
apidog run --test-suite <suiteId> --project <id> -e <envId> -r cli,junit
Sequence diagram: a test user in Org A logs in, gets a token, requests an Org B invoice, and the test passes on 403 or 404 and fails on 200

การทดสอบผลลัพธ์ที่เป็นบวก (positive check) มีความสำคัญมาก เพราะหากไม่มีขั้นตอนนี้ กรณีที่ระบุ base URL ผิดก็จะได้สถานะ 404 กลับมาเช่นกัน ซึ่งจะทำให้แบบทดสอบผ่านด้วยเหตุผลที่ผิดพลาด

เพิ่มบรรทัดคำสั่ง apidog run เดียวกันนี้ลงในเวิร์กโฟลว์ข้างต้น โดยรันเทียบกับระบบ preview หรือ staging ที่เตรียมข้อมูลองค์กรทดสอบไว้ และห้ามใช้ข้อมูลจริงบน production โดยเด็ดขาด ทั้งนี้สามารถดูรายละเอียดของ flag อื่น ๆ ได้ที่เอกสารอ้างอิงคำสั่ง apidog run และดูขั้นตอนการตั้งค่า agent ได้ที่ Apidog CLI ใน Claude Code

button

คำถามที่พบบ่อย (FAQ)

วิธีที่ดีที่สุดในการตรวจหาช่องโหว่ใน repo ฟรีคืออะไร? ให้ใช้เครื่องมือสแกน dependency, Gitleaks และ Semgrep Community Edition ร่วมกัน แล้วเสริมด้วย runtime test สำหรับตรวจสอบสิทธิ์การเข้าถึง (authorization) เนื่องจากไม่มีเครื่องมือใดเพียงตัวเดียวที่ครอบคลุมทุกด้านใน repo ทดสอบของเรา

Vercel Security Review ใช้งานได้ฟรีหรือไม่? ฟรีเฉพาะจนถึงวันที่ 10 พฤศจิกายน 2026 และเปิดให้ใช้เฉพาะทีมระดับ Pro และ Enterprise เท่านั้น หลังจากนั้นจะคิดค่าบริการตามอัตราโทเค็นของผู้ให้บริการบวกเพิ่ม $0.25 ต่อ 1 ล้านโทเค็น ส่วน repo ที่ไม่ได้ deploy บน Vercel ยังไม่รองรับในขณะนี้

GitHub secret scanning ใช้งานได้ฟรีบน private repo หรือไม่? ไม่ฟรี Secret scanning และ CodeQL ใช้งานได้ฟรีบน public repo เท่านั้น แต่สำหรับ private repo จำเป็นต้องใช้ GitHub Secret Protection ($19) หรือ GitHub Code Security ($30) ต่อ active committer ต่อเดือน ส่วน Dependabot alerts ใช้งานได้ฟรีสำหรับ repo ทั้งสองประเภท

Semgrep สามารถตรวจพบบั๊กด้านสิทธิ์การเข้าถึง (authorization) ได้หรือไม่? Semgrep ไม่ได้แจ้งเตือนเกี่ยวกับ route ใบแจ้งหนี้ของเราเมื่อใช้ ruleset ที่เราทดสอบ เนื่องจาก Community Edition ไม่สามารถติดตามข้อมูลข้ามฟังก์ชันหรือข้ามไฟล์ได้ อย่างไรก็ตาม คุณสามารถเขียน custom rules สำหรับรูปแบบเฉพาะใน codebase ของคุณได้

เครื่องมือสแกนสามารถใช้ทดแทนการทดสอบเจาะระบบ (penetration test) ได้หรือไม่? ไม่ได้ เครื่องมือสแกนและการทดสอบจะครอบคลุมเฉพาะรูปแบบที่รู้จักและกรณีที่คุณเขียนแบบทดสอบไว้เท่านั้น ส่วนการทดสอบเจาะระบบจะค้นหาสิ่งที่คุณคาดไม่ถึง และในเอกสารของ Vercel เองก็ระบุไว้เช่นกันว่าการรีวิวความปลอดภัยของตนไม่ใช่การทดสอบเจาะระบบ

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API