TECHDEV · Flagship · Công cụ mã nguồn mở

gheist-guard

Công cụ phát hiện dạng tấn công workflow Gheist bị cài cắm, chạy local, xác định, chỉ đọc: một lệnh, một kết luận cho mỗi repo, một checklist xoay secret.

TypeScript · Không cần thư viện runtime · MIT · Node 20+ · Mặc định chỉ đọc · Không dùng model, không cần tài khoản, không bao giờ in giá trị secret.

Không phải chiêu Pokémon hay phép trong Elder Scrolls: đây là CLI dò cục bộ cho chiến dịch Gheist gieo workflow độc mà Wiz công bố (~26/10/2026).

Dạng tấn công mà công cụ theo dõi

Một token bị đánh cắp từ máy của một developer trở thành kênh rò rỉ secret cho cả tổ chức, mà không có tên miền lạ hay kết nối ra ngoài nào để tường lửa chặn. Kẻ tấn công đẩy một nhánh tên ci-sync- kèm sáu ký tự, commit một workflow in secret của repo dưới dạng mã hóa base32 vào log chạy (GitHub chỉ che secret khi nó xuất hiện nguyên văn), rồi tải log qua GitHub API và xóa run trong vài giây. Wiz Research đã thu hồi hơn 13.500 nhánh bị cài cắm từ hơn 850 tài khoản bị xâm phạm trong báo cáo tháng 10/2026. Cơ chế kiểm soát ngày 28/7/2026 của GitHub giữ các run đáng ngờ trong repo public để chờ cộng tác viên phê duyệt, nhưng không áp dụng cho repo private hay GitHub Enterprise Server — đúng nơi dạng tấn công này thành công. Xóa nhánh hay xóa run cũng không hủy được việc lộ: mọi secret mà run đó đọc được đều phải xoay.

“Gheist” là tên Wiz Research đặt cho chiến dịch mà họ báo cáo tháng 10/2026. Công cụ này không liên kết, không được Wiz chứng thực, và không tự nhận là công cụ đầu tiên phát hiện chiến dịch nào. Workflow rò rỉ không chứa text secret nên không công cụ quét nội dung nào phát hiện được — gheist-guard theo dõi chính hành vi, từ bằng chứng còn sót lại.

Công cụ kiểm tra gì

Quy tắcBằng chứng
R1 — Mẫu tên nhánhNhánh khớp ^ci-sync-[0-9a-z]{6}$
R2 — Danh tính workflow.github/workflows/sync-check.yml với commit “ci: sync config”
R3 — Nội dung rò rỉNội dung workflow rò rỉ secret dạng base32/base64
R4 — Vòng đời runRun hoàn thành rồi bị xóa trong 60 giây
R5 — Dấu vết công cụGitHub API user agent “gheist”
R7 — Biến thể self-hostedJob tên sync-host săn credential trên runner

Tham chiếu đầy đủ các quy tắc: docs/RULES.md trong repo.

Kết luận

Kết luậnÝ nghĩaMã thoát
CLEARKhông quy tắc nào kích hoạt.0
SUSPECTCó quy tắc kích hoạt nhưng chưa đủ tổ hợp đầy đủ theo tài liệu. Kèm đúng bước kiểm tra tiếp theo — không bao giờ yêu cầu xoay secret, không bao giờ âm thầm CLEAR.1
CONFIRMEDMẫu nhánh (R1) cộng thêm bất kỳ một trong: danh tính workflow (R2), nội dung rò rỉ (R3), vòng đời run (R4), dấu vết công cụ (R5), hoặc biến thể self-hosted (R7). Luôn kèm checklist xoay secret theo thứ tự.1

Mã thoát 2 nghĩa là lỗi dùng lệnh hoặc lỗi API. Luôn in một dòng tóm tắt ra stderr. Tên “Gheist” chỉ xuất hiện trong kết luận khi mẫu đầy đủ theo tài liệu khớp.

Cài đặt từ source

git clone https://github.com/techdevfun/gheist-guard.git
cd gheist-guard
npm ci
npm run build
node dist/cli.js scan <owner/repo>

Lệnh chép đúng từ README của gheist-guard (v0.1.1). Chưa dùng npm install -g gheist-guard — README ghi là “once published to npm” (khi đã publish lên npm). Cần Node 20 trở lên. Token fine-grained chỉ cần quyền đọc repo là đủ cho đường REST; truyền qua --token hoặc GITHUB_TOKEN.

Ví dụ

# Quét một repo (đường REST, chỉ đọc)
node dist/cli.js scan <owner/repo>
# Quét mọi repo trong một tổ chức (đường REST)
node dist/cli.js scan --org <org>
# Đường audit-log (cần token của organization-owner khi chạy thật;
# --events chạy với payload audit-log đã ghi lại)
node dist/cli.js audit --org <org> --events audit-events.json
# In lại checklist xoay secret từ report đã lưu, không cần quét lại
node dist/cli.js scan <owner/repo> > report.json
node dist/cli.js checklist <owner/repo> --report report.json

Automation hợp lệ có thể đưa vào allowlist và sẽ được báo là SKIPPED kèm lý do, không bao giờ bị bỏ qua âm thầm (xem README cho --allow-branch-pattern và --allow-workflow).

Checklist xoay secret (chỉ khi CONFIRMED, theo thứ tự)

  1. Thu hồi token của người đẩy.
  2. Xoay mọi secret mà run đó có thể đọc (chỉ liệt kê tên).
  3. Kiểm tra các role OIDC có thể đảm nhận từ ref khớp.
  4. Kiểm tra máy của người đẩy có bị infostealer xâm phạm không.

Checklist chỉ liệt kê tên secret. Công cụ không bao giờ in, lưu hay truyền giá trị secret, và v1 không bao giờ tự xóa, xoay hay thu hồi gì — người vận hành tự làm.

Số liệu đã đo (README, bản build 2026-10-27)

Đây KHÔNG phải gì — và các giới hạn

Source + README trên GitHub → · Báo lỗi → · ask@techdev.fun

Công cụ liên quan

Các công cụ mã nguồn mở khác của TECHDEV: sessguard, runverdict, vetgate, context-diet, ci-failure-detective, agent-seatbelt, devsecops-os, env-doctor, skill-audit, logtrim, testguard, breakcheck, keymap, memgraph, ggufit, leaseguard, factfence, jsonfold

Đóng góp ý kiến

Bình chọn cho công cụ này, đề xuất tính năng, hoặc thảo luận với các vận hành khác trên bảng cộng đồng.