- Dreadnode chạy SAST trên binary Azure Cosmos DB lấy từ Microsoft Container Registry bằng .NET reversing agent dùng Kimi K2.6.
- 19 phút 26 giây, $1.97, ra 1 lỗ tautological trong TLS certificate validation — managed identity token có thể bị MITM.
TL;DR
Dreadnode công bố demo dùng .NET reversing capability trong TUI v2.0 để scan binary Azure Cosmos DB kéo về từ Microsoft Container Registry (MCR). Agent chạy bằng Moonshot Kimi K2.6, hoàn thành trong 19 phút 26 giây, tiêu tốn $1.97, và phát hiện một lỗ high severity: TLS certificate validation callback trong managed identity auth bị viết tautological — luôn trả về true bất kể cert đến từ đâu. Đây là case study mạnh cho kỷ nguyên LLM-driven SAST trên compiled binary, không cần source.
What's new
Dreadnode vừa ra mắt v2.0 (24/03/2026) với TUI mới và capability registry. Trong đó, dotnet-reversing là một capability độc lập: nhận input là binary .NET (local path hoặc NuGet package ID), dùng Mono.Cecil + ILSpy để decompile, rồi giao IL-reconstructed C# cho LLM phân tích theo mục tiêu do user chỉ định (ví dụ: "find all critical security vulnerabilities").
Model được chọn là Kimi K2.6 — mô hình MoE 1 nghìn tỷ tham số của Moonshot AI, open-weight, ra mắt 20/04/2026. K2.6 mạnh ở long-horizon coding và agent swarm, context window 262K token, nên nuốt gọn toàn bộ reconstructed source của Cosmos DB trong 1 run.
Technical facts
Con số hiệu suất Dreadnode công bố:
| Chỉ số | Giá trị |
|---|---|
| Model | Moonshot AI Kimi K2.6 |
| Runtime | 19 phút 26 giây |
| Input tokens | ↑ 3,124,000 |
| Output tokens | ↓ 33,300 |
| Cost | $1.97 |
| Target | Azure Cosmos DB (deprecated .NET binary từ MCR) |
| Finding | 1 x high severity TLS validation bug |
Tỷ lệ input/output ~94:1 rất điển hình cho SAST heavy-context: agent nạp lượng lớn decompiled code, chỉ emit một finding ngắn ở output. Với pricing OpenRouter $0.80 / $3.50 per M token input/output, tổng $1.97 khớp gần sát — một SAST scan toàn sản phẩm enterprise với giá bằng một ly latte.
Chi tiết lỗ hổng: TLS callback tautological
Khi Azure Cosmos DB dùng managed identity để auth, client gọi một internal token service qua HTTPS. TLS validation được override bằng RemoteCertificateValidationCallback tự viết. Logic — viết lại dưới dạng giả lập:
bool Validate(X509Certificate cert, X509Chain chain, SslPolicyErrors errors) {
var leafThumbprint = cert.Thumbprint;
foreach (var element in chain.ChainElements) {
if (element.Certificate.Thumbprint == leafThumbprint)
return true;
}
return false;
}Bug nằm ở chỗ: theo định nghĩa X.509, leaf cert luôn nằm ở chain.ChainElements[0]. Nên check "thumbprint của leaf có match cert nào trong chain không?" là tautology — mặc định luôn đúng. Kết quả: callback trả true cho mọi server cert, kể cả cert tự ký của attacker.
Nếu kẻ tấn công chiếm được network path tới internal token service endpoint, họ có thể trình cert tùy ý và đánh cắp managed identity token mà client tưởng đang gửi cho Azure. Đây là lỗ class broken certificate validation kinh điển — đã thấy ở nhiều .NET client khác (xem dotnet/runtime #59944).
Why it matters
Ba điều đáng chú ý:
- Legacy binary vẫn chứa vuln exploitable. Cosmos DB phiên bản bị scan đã deprecated, nhưng binary vẫn được serve trên MCR — nghĩa là nhiều deployment production vẫn pull về chạy. Deprecated ≠ không đáng audit.
- SAST không cần source code. Với binary + decompiler + LLM đủ context, bạn có thể audit sản phẩm closed-source. Đây là mô hình Wiz/Orca đã đi, giờ LLM khiến nó rẻ và nhanh hơn 1-2 bậc độ lớn.
- Kimi K2.6 thực chiến được. 3.1M token input là workload phi nhỏ — K2.6 xử lý đầy đủ, giá hợp lý, chất lượng đủ bắt ra logic bug mà grep/rule không thấy.
Dreadnode + LLM vs traditional SAST
| Tiêu chí | Dreadnode + Kimi K2.6 | Traditional SAST (CodeQL, Semgrep) |
|---|---|---|
| Input | Binary đã compile | Source code + build pipeline |
| Thời gian | ~20 phút / sản phẩm | Hours → days cho coverage tương tự |
| Chi phí | ~$2 per scan (token LLM) | License + engineer time |
| Semantic depth | Hiểu logic tautological | Khó viết rule catch bug logic-level |
| Reliability | Non-deterministic, cần verify | Deterministic, ít hallucinate |
Không phải thay thế — là bổ sung. Traditional SAST vẫn vô đối về coverage có quy luật rõ. LLM-SAST bắt được class bug mà con người phải đọc code mới hiểu.
Use cases thực tế
- Audit closed-source SDK trước khi tích hợp vào stack
- Supply-chain scan NuGet package ẩn danh
- Red team recon: phân tích binary đã deploy tại target
- Legacy/deprecated product audit — case study Cosmos DB chính là mẫu
- Cloud provider research — theo chân Wiz, Orca tìm ChaosDB, CosMiss
Limitations & pricing
Dreadnode TUI v2.0 GA từ 24/03/2026, install qua dn CLI. Capability registry mở bằng Ctrl+P trong TUI. Kimi K2.6 open-weight (Modified MIT) — team có yêu cầu data sovereignty có thể self-host thay vì qua OpenRouter. Giá tính theo token, scan càng lớn bill càng cao; nhưng với range $1-5 per product, cost khó là blocker.
Cảnh báo thực dụng: LLM có thể hallucinate finding. Mọi vuln K2.6 báo ra phải có human security engineer verify với PoC. Đừng auto-file CVE từ output raw.
What's next
Hướng phát triển logic: mở rộng reversing sang Java, Go, Rust binaries; pipeline finding thẳng vào Jira/GitHub Issue; agent swarm parallel scan nhiều binary cùng lúc (K2.6 đã hỗ trợ 300 sub-agents). Với giá và tốc độ như demo này, câu hỏi không còn là "có nên scan binary đó không" mà là "tại sao chưa scan?".
Nguồn: Dreadnode (X), dreadnode/example-agents, Dreadnode v2 launch, MarkTechPost — Kimi K2.6.


