Recently, we all experienced a Richter 8 earthquake in the fundamentals of the web in one way or another, due to PHP2Shell. Whether you were an end-user who couldn’t access the government’s website anymore, or you were a developer tasked with saving your company, we all felt it. And I won’t go into detail on this exploit! Engineers around the globe should all have the same shared gut feeling on the root cause of the issue: LLM-powered exploitation; CVE scanning.

Just take a look at this graph for me, it plots created CVEs over time:

05K10K15K20K20002005201020152020202517,491 in Oct 2026Jan 2000: 68 CVEsFeb 2000: 86 CVEsMar 2000: 57 CVEsApr 2000: 79 CVEsMay 2000: 110 CVEsJun 2000: 119 CVEsJul 2000: 74 CVEsAug 2000: 3 CVEsSep 2000: 3 CVEsOct 2000: 136 CVEsNov 2000: 73 CVEsDec 2000: 212 CVEsJan 2001: 130 CVEsFeb 2001: 117 CVEsMar 2001: 105 CVEsApr 2001: 17 CVEsMay 2001: 105 CVEsJun 2001: 211 CVEsJul 2001: 191 CVEsAug 2001: 206 CVEsSep 2001: 135 CVEsOct 2001: 142 CVEsNov 2001: 61 CVEsDec 2001: 259 CVEsJan 2002: 25 CVEsFeb 2002: 15 CVEsMar 2002: 104 CVEsApr 2002: 45 CVEsMay 2002: 150 CVEsJun 2002: 102 CVEsJul 2002: 137 CVEsAug 2002: 256 CVEsSep 2002: 68 CVEsOct 2002: 314 CVEsNov 2002: 75 CVEsDec 2002: 879 CVEsJan 2003: 37 CVEsFeb 2003: 49 CVEsMar 2003: 122 CVEsApr 2003: 135 CVEsMay 2003: 80 CVEsJun 2003: 129 CVEsJul 2003: 48 CVEsAug 2003: 208 CVEsSep 2003: 35 CVEsOct 2003: 92 CVEsNov 2003: 98 CVEsDec 2003: 515 CVEsJan 2004: 65 CVEsFeb 2004: 91 CVEsMar 2004: 143 CVEsApr 2004: 107 CVEsMay 2004: 68 CVEsJun 2004: 52 CVEsJul 2004: 102 CVEsAug 2004: 244 CVEsSep 2004: 90 CVEsOct 2004: 101 CVEsNov 2004: 173 CVEsDec 2004: 1,243 CVEsJan 2005: 323 CVEsFeb 2005: 105 CVEsMar 2005: 164 CVEsApr 2005: 127 CVEsMay 2005: 1,270 CVEsJun 2005: 250 CVEsJul 2005: 293 CVEsAug 2005: 327 CVEsSep 2005: 313 CVEsOct 2005: 293 CVEsNov 2005: 511 CVEsDec 2005: 1,034 CVEsJan 2006: 385 CVEsFeb 2006: 448 CVEsMar 2006: 556 CVEsApr 2006: 570 CVEsMay 2006: 608 CVEsJun 2006: 625 CVEsJul 2006: 530 CVEsAug 2006: 542 CVEsSep 2006: 555 CVEsOct 2006: 559 CVEsNov 2006: 517 CVEsDec 2006: 764 CVEsJan 2007: 602 CVEsFeb 2007: 532 CVEsMar 2007: 713 CVEsApr 2007: 628 CVEsMay 2007: 594 CVEsJun 2007: 547 CVEsJul 2007: 578 CVEsAug 2007: 526 CVEsSep 2007: 439 CVEsOct 2007: 560 CVEsNov 2007: 429 CVEsDec 2007: 448 CVEsJan 2008: 501 CVEsFeb 2008: 530 CVEsMar 2008: 508 CVEsApr 2008: 457 CVEsMay 2008: 385 CVEsJun 2008: 436 CVEsJul 2008: 519 CVEsAug 2008: 368 CVEsSep 2008: 454 CVEsOct 2008: 537 CVEsNov 2008: 439 CVEsDec 2008: 530 CVEsJan 2009: 469 CVEsFeb 2009: 689 CVEsMar 2009: 567 CVEsApr 2009: 569 CVEsMay 2009: 367 CVEsJun 2009: 452 CVEsJul 2009: 449 CVEsAug 2009: 531 CVEsSep 2009: 576 CVEsOct 2009: 353 CVEsNov 2009: 314 CVEsDec 2009: 442 CVEsJan 2010: 319 CVEsFeb 2010: 308 CVEsMar 2010: 515 CVEsApr 2010: 504 CVEsMay 2010: 424 CVEsJun 2010: 493 CVEsJul 2010: 344 CVEsAug 2010: 383 CVEsSep 2010: 301 CVEsOct 2010: 435 CVEsNov 2010: 280 CVEsDec 2010: 361 CVEsJan 2011: 397 CVEsFeb 2011: 382 CVEsMar 2011: 356 CVEsApr 2011: 312 CVEsMay 2011: 296 CVEsJun 2011: 294 CVEsJul 2011: 308 CVEsAug 2011: 295 CVEsSep 2011: 389 CVEsOct 2011: 484 CVEsNov 2011: 312 CVEsDec 2011: 347 CVEsJan 2012: 317 CVEsFeb 2012: 348 CVEsMar 2012: 405 CVEsApr 2012: 228 CVEsMay 2012: 434 CVEsJun 2012: 413 CVEsJul 2012: 536 CVEsAug 2012: 741 CVEsSep 2012: 665 CVEsOct 2012: 549 CVEsNov 2012: 445 CVEsDec 2012: 270 CVEsJan 2013: 443 CVEsFeb 2013: 410 CVEsMar 2013: 438 CVEsApr 2013: 442 CVEsMay 2013: 358 CVEsJun 2013: 369 CVEsJul 2013: 483 CVEsAug 2013: 378 CVEsSep 2013: 507 CVEsOct 2013: 602 CVEsNov 2013: 399 CVEsDec 2013: 495 CVEsJan 2014: 579 CVEsFeb 2014: 445 CVEsMar 2014: 538 CVEsApr 2014: 684 CVEsMay 2014: 554 CVEsJun 2014: 450 CVEsJul 2014: 654 CVEsAug 2014: 410 CVEsSep 2014: 1,158 CVEsOct 2014: 1,413 CVEsNov 2014: 505 CVEsDec 2014: 618 CVEsJan 2015: 737 CVEsFeb 2015: 496 CVEsMar 2015: 457 CVEsApr 2015: 558 CVEsMay 2015: 417 CVEsJun 2015: 498 CVEsJul 2015: 660 CVEsAug 2015: 607 CVEsSep 2015: 530 CVEsOct 2015: 700 CVEsNov 2015: 368 CVEsDec 2015: 569 CVEsJan 2016: 668 CVEsFeb 2016: 394 CVEsMar 2016: 334 CVEsApr 2016: 668 CVEsMay 2016: 609 CVEsJun 2016: 518 CVEsJul 2016: 711 CVEsAug 2016: 416 CVEsSep 2016: 596 CVEsOct 2016: 686 CVEsNov 2016: 388 CVEsDec 2016: 527 CVEsJan 2017: 1,141 CVEsFeb 2017: 1,075 CVEsMar 2017: 1,373 CVEsApr 2017: 1,599 CVEsMay 2017: 4,146 CVEsJun 2017: 1,043 CVEsJul 2017: 1,312 CVEsAug 2017: 1,564 CVEsSep 2017: 1,233 CVEsOct 2017: 1,432 CVEsNov 2017: 1,077 CVEsDec 2017: 1,119 CVEsJan 2018: 1,713 CVEsFeb 2018: 1,342 CVEsMar 2018: 2,303 CVEsApr 2018: 1,683 CVEsMay 2018: 1,191 CVEsJun 2018: 1,804 CVEsJul 2018: 2,218 CVEsAug 2018: 1,043 CVEsSep 2018: 1,194 CVEsOct 2018: 1,472 CVEsNov 2018: 990 CVEsDec 2018: 1,200 CVEsJan 2019: 1,644 CVEsFeb 2019: 882 CVEsMar 2019: 1,631 CVEsApr 2019: 1,573 CVEsMay 2019: 1,324 CVEsJun 2019: 1,265 CVEsJul 2019: 1,646 CVEsAug 2019: 2,050 CVEsSep 2019: 1,541 CVEsOct 2019: 1,737 CVEsNov 2019: 1,779 CVEsDec 2019: 1,866 CVEsJan 2020: 1,873 CVEsFeb 2020: 1,480 CVEsMar 2020: 1,787 CVEsApr 2020: 2,209 CVEsMay 2020: 1,058 CVEsJun 2020: 1,856 CVEsJul 2020: 1,453 CVEsAug 2020: 1,240 CVEsSep 2020: 1,636 CVEsOct 2020: 1,574 CVEsNov 2020: 1,496 CVEsDec 2020: 1,563 CVEsJan 2021: 1,948 CVEsFeb 2021: 1,493 CVEsMar 2021: 1,586 CVEsApr 2021: 1,930 CVEsMay 2021: 1,508 CVEsJun 2021: 1,937 CVEsJul 2021: 1,613 CVEsAug 2021: 2,249 CVEsSep 2021: 1,917 CVEsOct 2021: 1,717 CVEsNov 2021: 1,644 CVEsDec 2021: 2,422 CVEsJan 2022: 2,190 CVEsFeb 2022: 2,017 CVEsMar 2022: 2,094 CVEsApr 2022: 2,061 CVEsMay 2022: 2,036 CVEsJun 2022: 2,334 CVEsJul 2022: 2,152 CVEsAug 2022: 2,409 CVEsSep 2022: 2,324 CVEsOct 2022: 1,908 CVEsNov 2022: 1,990 CVEsDec 2022: 2,899 CVEsJan 2023: 2,570 CVEsFeb 2023: 2,471 CVEsMar 2023: 2,781 CVEsApr 2023: 2,363 CVEsMay 2023: 2,742 CVEsJun 2023: 2,409 CVEsJul 2023: 2,354 CVEsAug 2023: 2,520 CVEsSep 2023: 2,825 CVEsOct 2023: 2,727 CVEsNov 2023: 2,501 CVEsDec 2023: 2,686 CVEsJan 2024: 2,647 CVEsFeb 2024: 2,910 CVEsMar 2024: 3,352 CVEsApr 2024: 3,787 CVEsMay 2024: 5,047 CVEsJun 2024: 3,173 CVEsJul 2024: 3,174 CVEsAug 2024: 2,945 CVEsSep 2024: 2,540 CVEsOct 2024: 3,595 CVEsNov 2024: 4,086 CVEsDec 2024: 3,450 CVEsJan 2025: 4,413 CVEsFeb 2025: 3,831 CVEsMar 2025: 4,166 CVEsApr 2025: 4,142 CVEsMay 2025: 4,264 CVEsJun 2025: 3,800 CVEsJul 2025: 3,932 CVEsAug 2025: 3,738 CVEsSep 2025: 4,536 CVEsOct 2025: 4,389 CVEsNov 2025: 3,115 CVEsDec 2025: 5,644 CVEsJan 2026: 5,143 CVEsFeb 2026: 4,808 CVEsMar 2026: 6,305 CVEsApr 2026: 5,602 CVEsMay 2026: 7,262 CVEsJun 2026: 7,765 CVEsJul 2026: 10,155 CVEsAug 2026: 12,719 CVEsSep 2026: 15,066 CVEsOct 2026: 17,491 CVEs
Source: CVE Statistics by Year – Vulnerability Trends Over Time | CVE Find

Yes, you can argue whether “CVEs created” is actually a good statistic to measure the rising vulnerability of general software, but that’s not actually my point. My point is that more and more - even if “merely” potential - are found and reported. Clearly people are busier and busier trying to find these exploits, or even unintentionally! Any good coding agent mentions vulnerabilities in real time as it’s going through the codebase.

Try typing “Claude, find exploits, make no mistakes” in your project every once in a while.

Some of you would jest that this is utterly ridiculous, and let’s not pretend it isn’t (we live in an absurd time), but the funny/sad thing is that it works! And not just on your company codebase either. Did you know that you likely depend on thousands of codebases you have absolutely zero control over – if even you’ve the knowledge they exist in the first place? It’s called open-source. It’s the most beautiful thing humanity has ever come up with and it’s an absolute hellscape once you fathom it. If you’ve ever rented a raw VM in the cloud and seen the access logs completely spammed with crawlers the second you turn it on, it’s even worse with open source. Publish any library to any ecosystem and it gets hundreds of pulls per day just by automated systems. Any script kiddie can download an open source package and run it by a pay-by-the-token hypercapable all-knowing cybersecurity expert. Open source is largely run by volunteers or underpaid developers that still have a glimmer of hope and duty to humanity sparkling in their eyes. But that sparkle has been fading, rapidly, as LLMs are flooding these codebases with PRs, some malicious, some with good intentions, most of them not properly thought about. How are these kind maintainers supposed to review all of this while keeping their free little tool stable enough?

Enter PostgreSQL 19, the actual case study this blog post is about. We will learn from them.

PostgreSQL (which I will just call “Postgres” from now on) is the world’s favourite database and has a release once a year, around September or October. As of writing, it is the very end of October and we haven’t seen this year’s release, which is supposed to be version 19. It is an open-source project, which means anyone can see or modify the application for themselves. Every release cycle, Postgres allows users to propose changes and get their code merged into the product. Usually this stage takes around 9 months, then the remaining months are spent testing and patching until a release comes out, performed with the community at large.

And remember, everything you know touches Postgres: Your Instagram pictures, your Reddit comment history, all your ChatGPT chats, everything you ever did with a website running on Supabase. This product needs unbreakable, rock-solid review, test and release procedures, which is why they take so long.

Why is it delayed, then? In large part because LLMs keep finding issues. Up to ten significant features set for version 19 have been reverted, including the headline SQL/PGQ! Patches for bugs - or even for previous bug patches - have issues found!

It’s fascinating and horrifying to read the mailing lists for the current cycle: PostgreSQL: scary patch contest. (And do read this!) To quote the maintainers:

“I think it's pretty clear that none of these were as robust at commit time as we would like”

“It feels we are in an unprecedented situation here.”

“we are in a situation where we might be reverting multiple big features, and we don't even know if their removal will effect other changes”

Of course, this is healthy discussion and things you want to see from the people maintaining such a crucial product. It is better to admit you’re unsure of the impact than make a rash decision. It is good to acknowledge the situation and work through it communally, and make the hard decisions with the team, informed and thought through, rather than by each individual developer, each with unjust overconfidence and the fear someone may one day realise how incapable they actually are with dealing with the situation at hand by themselves.

So they delayed the release until they are happy.

It’s easy to judge the situation from outside and quote Miyamoto here and say “a delayed game is eventually good, but a rushed game is forever bad”, good job guys! But just like he never actually said this, it is never actually applicable in your role. You exist on the inside of this business; you are the actor, not the judge. You are being judged constantly, by many judges each with their own sense of justice and none of them agree, just like the Postgres maintainers being judged by the whole software world! We learn from them that you should not be afraid. Afraid to say no. To delay. To opine thy worries in the town square.
You should not be afraid to act. Delay it! Beg for a week of security testing! Beg to set up CVE scanning pipelines! Run a shitty audit with Claude, rather than nothing at all!

This touches the very foundation of what it means to be an engineer. Your job is not to write code or review architecture proposals or tell sales what is and isn’t possible, it is to fathom the chaotic landscape of software development holistically and make decisions nobody else can really ever understand unless they are also suffering beside you. The best judge in this matter is ultimately yourself. As someone who has a product, a codebase to maintain, who’s been put in charge of making decisions for a piece of software whether for client use or public use, you need to take the LLM threat very, very seriously.

As for the title question, “What will you do once AI’s ability to find bugs outstrips your pace of fixing them?” The answer is hereby clarified: you do your best and think holistically. That is what it means to be an engineer. You ask for more manpower. You set up defense-in-depth. You add risk clauses to the EULA. You document rejections of your objections. You hire pentesters. You triage features. You ask for delays.

LLMs are awesome and frightful tools.
We learn from the community as a whole.
Stay honest, and keep being an engineer.


28-10-2026
by Roy Prins