diff --git a/citations.bib b/citations.bib index c4cabd7..d747217 100644 --- a/citations.bib +++ b/citations.bib @@ -13632,3 +13632,16 @@ @misc{cryptoadventureopenmonero2026 url = {https://cryptoadventure.com/openmonero-warns-users-to-stop-payments-after-new-exploit-alert/}, note = {OAK v0.1 — verified. URL audit confirmed HTTP 200.} } + +% ===================================================================== +% Complementary signal (Smart-Contract Exploit, T9) +% ===================================================================== + +@misc{holistis2026auditaccept, + author = {{Ouadoudi, Abdellah}}, + title = {Audit-Competition Acceptance Rates as a Complementary Signal to {OAK} T9: Methodology and Reproduction Steps}, + year = {2026}, + howpublished = {GitHub repository, \texttt{bug-bounty-intelligence-mcp}}, + url = {https://github.com/holistis/bug-bounty-intelligence-mcp/blob/8c3e3084017cd7fa28be8a662012d28c41d33b8d/METHODOLOGY.md}, + note = {Non-peer-reviewed secondary analysis. Sherlock audit-competition submission data, restricted to the subset (10 of 105 crawled contests, 1{,}032 findings) where accepted+invalid issue counts reconcile exactly against Sherlock's own published judging-repo results; the larger unverified corpus is explicitly excluded rather than estimated. Pre-deployment submission-acceptance data, not a claim about realized-incident frequency or detection coverage — see cited document for full scope and limitations.} +} diff --git a/techniques/T9.001-oracle-price-manipulation.md b/techniques/T9.001-oracle-price-manipulation.md index dac3e45..ba780e2 100644 --- a/techniques/T9.001-oracle-price-manipulation.md +++ b/techniques/T9.001-oracle-price-manipulation.md @@ -131,3 +131,5 @@ The Mango Markets case is unusual in that the attacker publicly identified and l - T9.001.003 — Pull-reporter-oracle manipulation (BonqDAO) — Tellor / UMA-style stake-and-report dispute-window bypass. Each sub-class has a distinct mitigation surface (TWAP+multi-venue for .001; vault-share invariant for .002; dispute-window-respecting consumption for .003); v0.1 keeps them under the umbrella because the dollar-loss attribution and worked-example cohort are still building. Attribution-strength notes: Mango (high: public actor, court record); Cream / Vee / BonqDAO (medium: pseudonymous attackers, well-documented mechanics); Rari / Fuse (medium: mechanics public, primary-vs-contributing-factor classification disputed across forensic vendors). + +**Complementary signal (pre-deployment, not a T9.001 worked example).** In an exact-reconciled sample of Sherlock audit-competition submissions (10 contests, 1,032 findings; see `[holistis2026auditaccept]`), findings keyword-matched to oracle/price-manipulation claims were judged valid 36% of the time (n=131) — the lowest rate among the classes covered in that sample, consistent with this being a class that is easy to suspect but comparatively hard to conclusively prove. This describes pre-deployment audit-competition submission outcomes, not realized-incident frequency or detection coverage; the sample is small and keyword-tagged rather than semantically classified. diff --git a/techniques/T9.004-access-control-misconfiguration.md b/techniques/T9.004-access-control-misconfiguration.md index 819322a..8a8fa27 100644 --- a/techniques/T9.004-access-control-misconfiguration.md +++ b/techniques/T9.004-access-control-misconfiguration.md @@ -171,4 +171,6 @@ T9.004 is intentionally a broad category because the failure modes vary widely ( Attribution-strength notes: KiloEx and Euler (high: full forensic write-ups, reproducible test cases); Wormhole (high: Halborn / Chainalysis post-mortem, Jump remediation public); Poly Network (medium-high: attacker engaged publicly post-event, mechanics widely documented but attacker identity remains pseudonymous); Multichain (low: internal-vs-external attribution disputed). +**Complementary signal (pre-deployment, not a T9.004 worked example).** In the same exact-reconciled Sherlock sample (10 contests, 1,032 findings; see `[holistis2026auditaccept]`), access-control claims were judged valid 47% of the time (n=74) — higher than most other classes covered in that sample, plausibly because a missing or incorrect authorization check is more mechanically verifiable than a claim requiring an economic-exploitability argument. Pre-deployment submission data, not a claim about realized-incident frequency; sample is small and keyword-tagged, not semantically classified. + Wormhole is included as the v0.1 canonical example because the missing-authorisation-check is unambiguous from public technical write-ups, the dollar loss is large, and the post-mortem published by Halborn and Chainalysis is sufficient for contributors to understand the failure mode without us reproducing exploit specifics here. The KiloEx case is included specifically because it post-dates the broad adoption of static-analysis CI in DeFi and demonstrates the surface persists when the static-analysis pass is run on the wrong artifact (the contract was deployed but the analysis gate did not block it). diff --git a/techniques/T9.005-reentrancy.md b/techniques/T9.005-reentrancy.md index 95db024..9e60a06 100644 --- a/techniques/T9.005-reentrancy.md +++ b/techniques/T9.005-reentrancy.md @@ -96,3 +96,5 @@ OAK groups several sub-patterns under T9.005: T9.005 is marked Maturity = stable rather than historical because the underlying failure mode — surrendering execution flow before finalising state — recurs in modern variants that the canonical mitigation does not fully address. OpenZeppelin's `ReentrancyGuard` (widely adopted post-2019) substantially closes the 2016-style single-function pattern, and pre-deployment static analysis routinely catches it; consequently, post-2021 reentrancy incidents are dominated by (i) cross-function reentrancy where the per-function lock did not span the shared-state surface, (ii) cross-protocol reentrancy where the attacker re-enters a *peer* protocol that reads stale state, frequently chained with T9.002 to acquire flash-loaned capital, (iii) hook-based reentrancy where the external call is implicit in a token-standard receive hook the protocol did not treat as an external call, and (iv) read-only reentrancy where no state mutation occurs in the re-entry but a third protocol's view-function read is the loss surface. The Cream Finance October 2021 case is the v0.1 canonical example of the modern variant because it combines the cross-protocol pattern with flash-loan-enabled capital, making the T9.002 cross-reference unambiguous; The DAO is retained as the historical reference for the class origin and to ground the Ethereum-Classic fork context that newer contributors may not have lived through. Sub-Techniques may be split out in v0.x updates if the cross-protocol and read-only sub-patterns reach independent characterisation maturity (notably, read-only reentrancy is increasingly cited as a distinct sub-class in 2023–2025 audit-firm literature and may warrant its own technique ID). + +**Complementary signal (pre-deployment, not a T9.005 worked example).** In the same exact-reconciled Sherlock sample (10 contests, 1,032 findings; see `[holistis2026auditaccept]`), reentrancy claims were judged valid 78% of the time (n=51) — markedly higher than the other classes covered in that sample, suggesting that when a reentrancy path is flagged with enough specificity to submit, it disproportionately turns out to be real rather than a suspected-but-unreachable pattern. Pre-deployment submission data, not a claim about realized-incident frequency; sample is small and keyword-tagged, not semantically classified. diff --git a/techniques/T9.011-precision-loss-rounding-attack.md b/techniques/T9.011-precision-loss-rounding-attack.md index e99268a..f2b39a9 100644 --- a/techniques/T9.011-precision-loss-rounding-attack.md +++ b/techniques/T9.011-precision-loss-rounding-attack.md @@ -87,3 +87,5 @@ A structural observation: T9.011 is most severe when the vault is empty or near- False-positive considerations: not every donation-to-vault is T9.011. Legitimate users may send tokens directly to a vault contract address (rather than through the deposit entrypoint) out of ignorance of the vault's interface — this is a user error, not an attack. The distinguishing signal is the sequence: donation directly to the vault address, followed by a deposit from a different address whose shares round to zero or are proportionally depressed, followed by the donor withdrawing at a profit. The donation alone is insufficient; the donation + victim-deposit + donor-withdrawal sequence is the structural T9.011 signal. Additionally, vaults that have already accumulated meaningful totalAssets (well above the donation amount) are not practically exploitable — a donation of 1e6 into a vault with 1e18 totalAssets produces a share-price distortion of 0.0001%, which is within gas-cost noise. T9.011 is specifically the empty-or-near-empty-vault attack. Attribution-strength considerations: T9.011 attribution is typically at the `pseudonymous-attacker` level — the attacker's address that executed the donation, the victim's deposit that rounded to zero, and the attacker's subsequent withdrawal are all on-chain attributable. The attack sequence is reproducible from event logs alone; the attacker's profit is computable from the withdrawal event. This makes T9.011 one of the more forensically tractable T9 Techniques at the on-chain attribution layer. + +**Complementary signal (pre-deployment, not a T9.011 worked example).** In the same exact-reconciled Sherlock sample (10 contests, 1,032 findings; see `[holistis2026auditaccept]`), rounding/precision-loss claims were judged valid 40% of the time (n=63). Pre-deployment submission data, not a claim about realized-incident frequency; sample is small and keyword-tagged, not semantically classified.