<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: erasmus</title>
    <description>The latest articles on Forem by erasmus (@erasmusdt1977).</description>
    <link>https://forem.com/erasmusdt1977</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3833918%2Fe11eb669-e0f4-410c-930f-c6d455cb2713.png</url>
      <title>Forem: erasmus</title>
      <link>https://forem.com/erasmusdt1977</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/erasmusdt1977"/>
    <language>en</language>
    <item>
      <title>Why no tool can currently prove your code was reviewed and why that gap is now a crisis</title>
      <dc:creator>erasmus</dc:creator>
      <pubDate>Fri, 20 Mar 2026 16:42:26 +0000</pubDate>
      <link>https://forem.com/erasmusdt1977/why-no-tool-can-currently-prove-your-code-was-reviewed-and-why-that-gap-is-now-a-crisis-3dcd</link>
      <guid>https://forem.com/erasmusdt1977/why-no-tool-can-currently-prove-your-code-was-reviewed-and-why-that-gap-is-now-a-crisis-3dcd</guid>
      <description>&lt;p&gt;In March 2025, a GitHub account compromise triggered one &lt;br&gt;
of the most damaging software supply chain attacks of the &lt;br&gt;
year. In September, the Shai-Hulud worm tore through 800 &lt;br&gt;
npm packages via self-propagation — the first known &lt;br&gt;
self-replicating open source malware. In October, F5 &lt;br&gt;
Networks' development environment was breached by a &lt;br&gt;
China-linked group who stole BIG-IP source code containing &lt;br&gt;
encryption keys and configuration files. In November, &lt;br&gt;
trojanized versions of packages from PostHog, Zapier and &lt;br&gt;
Postman were pushed to npm via compromised maintainer &lt;br&gt;
accounts.&lt;/p&gt;

&lt;p&gt;And in almost every post-incident analysis, the same &lt;br&gt;
question surfaced: &lt;strong&gt;When exactly did the clean version &lt;br&gt;
become the compromised version, and how would anyone know?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question doesn't have a good answer today. This &lt;br&gt;
article explains why and what answering it properly &lt;br&gt;
actually requires.&lt;/p&gt;
&lt;h2&gt;
  
  
  The scale of the problem
&lt;/h2&gt;

&lt;p&gt;Software supply chain attacks more than doubled globally &lt;br&gt;
in 2025. Over 70% of organisations reported experiencing &lt;br&gt;
at least one third-party or software supply chain-related &lt;br&gt;
security incident. Global losses from software supply &lt;br&gt;
chain attacks are projected to reach $60 billion. &lt;/p&gt;

&lt;p&gt;More importantly, 35% of attacks originated through &lt;br&gt;
compromised software dependencies, 22% targeted CI/CD &lt;br&gt;
pipelines and build environments, and 20% involved &lt;br&gt;
poisoned or unverified container images.  Dependencies, &lt;br&gt;
build pipelines and containers now represent 75% of all &lt;br&gt;
supply chain attack entry points.&lt;/p&gt;

&lt;p&gt;Fewer than 50% of enterprises currently monitor more &lt;br&gt;
than 50% of their extended software supply chain.&lt;br&gt;&lt;br&gt;
Runtime security controls consistently detected threats &lt;br&gt;
too late.&lt;/p&gt;

&lt;p&gt;The attack surface has fundamentally changed. Threat &lt;br&gt;
actors are no longer targeting deployed applications — &lt;br&gt;
they are compromising software &lt;strong&gt;at the point of creation.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  What auditors actually need to see
&lt;/h2&gt;

&lt;p&gt;When a breach happens and statistically, it will — &lt;br&gt;
the first question is not "what was compromised" but &lt;br&gt;
"when did this start?" Investigators need to establish &lt;br&gt;
a timeline. That requires being able to point to a &lt;br&gt;
specific version of a specific codebase and say:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"This version was clean. Here is the proof. Here is &lt;br&gt;
the exact point where the record breaks."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without that, you're doing forensics in the dark. &lt;br&gt;
Consider what an auditor actually needs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A timestamped record tied to a specific commit.&lt;/strong&gt; &lt;br&gt;
Not a report generated today about yesterday's code. &lt;br&gt;
A cryptographic record that proves a specific commit &lt;br&gt;
hash was reviewed by a specific process at a specific &lt;br&gt;
moment in time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A chain of custody across versions.&lt;/strong&gt; If something &lt;br&gt;
broke between version 1.4.2 and 1.4.3, the auditor &lt;br&gt;
needs to be able to see that version 1.4.2 passed &lt;br&gt;
verification and version 1.4.3 either wasn't reviewed &lt;br&gt;
or failed. Without a linked chain of verification &lt;br&gt;
records, there is no way to establish when clean &lt;br&gt;
became compromised.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Independence from the organisation being audited.&lt;/strong&gt; &lt;br&gt;
If the only entity that can verify the review record &lt;br&gt;
is the organisation that produced it, the record is &lt;br&gt;
not evidence — it is an assertion. A regulator or &lt;br&gt;
insurer needs to be able to verify the record without &lt;br&gt;
trusting the party that generated it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explicit scope.&lt;/strong&gt; The record must state what was &lt;br&gt;
reviewed and critically what was not. A review &lt;br&gt;
that checked static patterns but not runtime behaviour &lt;br&gt;
must say so. A review claiming to cover everything &lt;br&gt;
when it covered half the surface is misleading evidence, &lt;br&gt;
not useful evidence.&lt;/p&gt;

&lt;p&gt;None of the mainstream SAST tools produce all four of &lt;br&gt;
these. Most produce none of them.&lt;/p&gt;


&lt;h2&gt;
  
  
  What developers and security teams actually face
&lt;/h2&gt;

&lt;p&gt;The gap between what teams think they have and what &lt;br&gt;
they actually have is significant. Here's what the &lt;br&gt;
real technical landscape looks like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scan results are not evidence.&lt;/strong&gt; When you run Snyk, &lt;br&gt;
Semgrep, or CodeQL, you get a report. That report &lt;br&gt;
lives in a dashboard or a PDF. It has a timestamp on &lt;br&gt;
it — but that timestamp can be changed. The report &lt;br&gt;
itself is not signed. There is no mechanism to prove &lt;br&gt;
the scan ran against the commit it claims to have &lt;br&gt;
scanned, rather than a different version. An auditor &lt;br&gt;
has to trust you. They cannot verify.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Median time to remediate leaked secrets is 94 days.&lt;/strong&gt; &lt;br&gt;
Analysis of over 400,000 public GitHub repositories &lt;br&gt;
found that the median time to remediate leaked secrets &lt;br&gt;
discovered in a repository was 94 days.  That's 94 days &lt;br&gt;
of exposure after discovery not after introduction. &lt;br&gt;
And that's just for known leaks in public repos. &lt;br&gt;
Private repos and unknown leaks are a different &lt;br&gt;
problem entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI/CD pipelines are a primary attack vector.&lt;/strong&gt; &lt;br&gt;
22% of supply chain attacks targeted CI/CD pipelines &lt;br&gt;
directly. When your build pipeline is compromised, &lt;br&gt;
code that looked clean when reviewed can be modified &lt;br&gt;
before it ships. A verification system that only &lt;br&gt;
checks source code and not the build process provides &lt;br&gt;
a false sense of security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM-assisted attacks are generating convincing &lt;br&gt;
cover commits.&lt;/strong&gt; Security researchers found that &lt;br&gt;
"the malicious injections don't arrive in obviously &lt;br&gt;
suspicious commits — the surrounding changes are &lt;br&gt;
realistic: documentation tweaks, version bumps, &lt;br&gt;
small refactors, and bug fixes that are stylistically &lt;br&gt;
consistent with each target project. This level of &lt;br&gt;
project-specific tailoring strongly suggests the &lt;br&gt;
attackers are using large language models to generate &lt;br&gt;
convincing cover commits." &lt;/p&gt;

&lt;p&gt;This is the most technically challenging problem. &lt;br&gt;
A backdoor that looks exactly like a legitimate &lt;br&gt;
commit — stylistically consistent, contextually &lt;br&gt;
appropriate will pass any review that relies on &lt;br&gt;
human inspection. The only defence is a cryptographic &lt;br&gt;
record that ties a specific hash to a verified state, &lt;br&gt;
so any subsequent modification is detectable &lt;br&gt;
regardless of how convincing it looks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JPMorgan Chase's CISO said it publicly.&lt;/strong&gt; &lt;br&gt;
JPMorgan Chase CISO Patrick Opet published an open &lt;br&gt;
letter urging software providers to treat supply chain &lt;br&gt;
risk as systemic rather than a niche AppSec issue, &lt;br&gt;
arguing that downstream enterprises cannot practically &lt;br&gt;
absorb the compounding risk from their many insecure &lt;br&gt;
software suppliers. When the CISO of the world's &lt;br&gt;
largest bank is writing open letters about this, it &lt;br&gt;
is no longer a niche concern.&lt;/p&gt;


&lt;h2&gt;
  
  
  The regulatory pressure is now real
&lt;/h2&gt;

&lt;p&gt;DORA — the EU Digital Operational Resilience Act &lt;br&gt;
came into force in January 2025. It applies to every &lt;br&gt;
financial entity operating in the EU. Article 9 &lt;br&gt;
requires demonstrable evidence of secure development &lt;br&gt;
processes. Not descriptions. Not policies. Evidence &lt;br&gt;
that can be presented to regulators and independently &lt;br&gt;
verified.&lt;/p&gt;

&lt;p&gt;"We use Snyk" is not DORA evidence. A signed, &lt;br&gt;
independently verifiable record of what was reviewed, &lt;br&gt;
when, against which commit, and what was found is.&lt;/p&gt;

&lt;p&gt;The FCA's operational resilience requirements in the &lt;br&gt;
UK impose similar expectations. So does PCI-DSS v4.0, &lt;br&gt;
which came into full effect in 2024. SOC 2 Type II &lt;br&gt;
auditors are increasingly asking for evidence of &lt;br&gt;
continuous verification rather than point-in-time &lt;br&gt;
reports.&lt;/p&gt;

&lt;p&gt;The direction of travel is clear: regulators want &lt;br&gt;
proof, not assertions.&lt;/p&gt;


&lt;h2&gt;
  
  
  What proof actually requires
&lt;/h2&gt;

&lt;p&gt;For a code review to be genuinely verifiable, the &lt;br&gt;
output needs to satisfy four properties:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tamper-evident.&lt;/strong&gt; If the result was modified after &lt;br&gt;
the fact, that modification must be detectable. This &lt;br&gt;
requires cryptographic signing — an Ed25519 or similar &lt;br&gt;
signature that ties the result to a specific key &lt;br&gt;
holder and a specific point in time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deterministic.&lt;/strong&gt; The same code reviewed by the same &lt;br&gt;
process must always produce the same result. If two &lt;br&gt;
independent parties run the same review on the same &lt;br&gt;
commit and get different outputs, neither output is &lt;br&gt;
trustworthy. Determinism is what makes independent &lt;br&gt;
verification possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Independently replayable.&lt;/strong&gt; A third party must be &lt;br&gt;
able to re-run the review themselves and confirm the &lt;br&gt;
result, without access to your systems or needing to &lt;br&gt;
trust the party that generated the original record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest about scope.&lt;/strong&gt; The record must explicitly &lt;br&gt;
state what was NOT checked. Runtime behaviour, dynamic &lt;br&gt;
testing, fuzzing, business logic — if these weren't &lt;br&gt;
covered, the record must say so. A review that implies &lt;br&gt;
complete coverage when it only checked static patterns &lt;br&gt;
is misleading evidence.&lt;/p&gt;


&lt;h2&gt;
  
  
  What a genuine audit trail looks like
&lt;/h2&gt;

&lt;p&gt;Here is what a verifiable review record actually &lt;br&gt;
needs to contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proof_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:a3f8c2d1..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repo_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"github.com/org/repo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"commit_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"f4a91b3e..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scan_timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-01-15T09:14:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"verdict"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VERIFIED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gates_passed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"result_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:9e72d1..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"supersedes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:prev_proof_id..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ed25519:AMT-SIG-v1:..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"NOT_verified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"runtime behaviour under production load"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"dynamic security testing (fuzzing, DAST)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"semantic correctness of business logic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"concurrency correctness validation"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;supersedes&lt;/code&gt; field is the critical one for &lt;br&gt;
incident response. It chains every verification &lt;br&gt;
record to the previous one. If something was clean &lt;br&gt;
at commit &lt;code&gt;f4a91b3e&lt;/code&gt; on January 15th and compromised &lt;br&gt;
at commit &lt;code&gt;a7c3d2f1&lt;/code&gt; on February 3rd, the chain shows &lt;br&gt;
exactly where the record breaks. An investigator &lt;br&gt;
doesn't need to reconstruct history — it's already &lt;br&gt;
there, cryptographically linked and tamper-evident.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;NOT_verified&lt;/code&gt; field is equally important. In a &lt;br&gt;
regulatory context, overstating the scope of a review &lt;br&gt;
is worse than admitting its limits. A record that &lt;br&gt;
honestly discloses what it didn't check is more &lt;br&gt;
credible evidence than one that implies it checked &lt;br&gt;
everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  The honest benchmark problem
&lt;/h2&gt;

&lt;p&gt;One more thing worth saying directly.&lt;/p&gt;

&lt;p&gt;A verification system that verifies 90% of &lt;br&gt;
real-world repositories is not being honest.&lt;/p&gt;

&lt;p&gt;Real code has real problems. Repositories that lack &lt;br&gt;
detectable structure, that claim to implement features &lt;br&gt;
not present in the code, that fail build checks — &lt;br&gt;
these exist in large numbers in the wild. &lt;br&gt;
As one recent industry report put it: "2025 marked &lt;br&gt;
the point when software supply chain risk became &lt;br&gt;
measurable — highlighting the growing need for &lt;br&gt;
verifiable foundations over unchecked delivery speed." &lt;/p&gt;

&lt;p&gt;A system that verifies everything is telling you &lt;br&gt;
what you want to hear. A system that verifies 41%, &lt;br&gt;
marks 38% as partial, and refuses to verify 20% is &lt;br&gt;
telling you something true — and giving you &lt;br&gt;
information you can actually act on.&lt;/p&gt;

&lt;p&gt;Honesty about what a tool cannot verify is itself &lt;br&gt;
a trust signal. It is also a regulatory requirement — &lt;br&gt;
DORA explicitly requires that evidence of review &lt;br&gt;
accurately represents the scope of what was done.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where this goes
&lt;/h2&gt;

&lt;p&gt;Supply chain security is increasingly influencing &lt;br&gt;
procurement, audit and insurance decisions, with &lt;br&gt;
software provenance and SBOM disclosures emerging &lt;br&gt;
as commercial requirements rather than best practices. &lt;/p&gt;

&lt;p&gt;The gap between "we ran a scan" and "here is &lt;br&gt;
independently verifiable proof that this specific &lt;br&gt;
code was reviewed by this process at this point in &lt;br&gt;
time" is going to close. Regulatory pressure, &lt;br&gt;
supply chain attacks, and the proliferation of &lt;br&gt;
AI-assisted malware are all pushing in the same &lt;br&gt;
direction.&lt;/p&gt;

&lt;p&gt;The tools that survive the next five years will be &lt;br&gt;
the ones that produce evidence, not assertions.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Nucleus Verify produces cryptographically signed, &lt;br&gt;
independently replayable verification certificates &lt;br&gt;
for any codebase — with a tamper-evident chain &lt;br&gt;
linking every scan to the previous. Free tier at &lt;br&gt;
&lt;a href="https://altermenta.com" rel="noopener noreferrer"&gt;altermenta.com&lt;/a&gt;. GitHub &lt;br&gt;
Action available at the &lt;br&gt;
&lt;a href="https://github.com/marketplace/actions/nucleus-verify" rel="noopener noreferrer"&gt;GitHub Marketplace&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
