These notes document sources and evidence behind A Decade of PHP Memory-Safety Bugs. Their purpose is to credit prior work accurately, connect discoveries to root-cause families and fixes, and avoid conflating a report with confirmed impact or verified patch effectiveness. The source-review cutoff is October 24, 2026; live issue and pull-request states may have changed.

The underlying research surveyed original security write-ups, PHP’s public bug database and GitHub issues, security advisories, PHP Foundation reports, core developer discussions, and the FlowFusion paper. A selected set of 58 historical records is maintained in windshock/php2shell’s corpus work. Fifty-eight records do not mean 58 independently verified, still-vulnerable bugs, and the examples below are not a statistically representative sample of all PHP vulnerabilities.

Evidence vocabulary

LevelWhat it establishesRequired provenance
ReportedA researcher filed a report or published a technical accountOriginal author, date, source URL
ReachedExecution reached a relevant site or transitionCoverage, breakpoint, state event
TriggeredThe relevant failure condition or invariant violation occurredFault-site or state-transition record
DetectedA sanitizer, debugger, assertion, or equivalent observer detected a problemTool output, version, PID, build provenance
Attackability assessedAttack conditions and impact were evaluatedOriginal research or official advisory, SAPI/context
Patch verifiedThe same path was contrasted before and after a validated fixExact commit/release and two valid executions

Open does not establish that the latest supported release remains exploitable. Closed does not, by itself, establish that all maintained branches contain a fix. Likewise, a crash under a locally executed PHP program does not necessarily imply a remotely exploitable HTTP vulnerability.

Selected primary research and issue records

PeriodOriginal work and creditTechnical subjectResearch caveat
2016#72530 · Taoguang Chen, subsequent PHP developer analysisGC, destructors, lifetimeDistinguish initial report from later fix
2016#73092 · Check Point researchPHP 7 unserialize and HashTable referencesEvaluate original exploitability claims separately
2016#73147 · Taoguang ChenUnserialization and re-entrancyVerify issue/CVE/fix mapping
2017#74103 · Chris YoungUnserialize UAFPreserve USE_ZEND_ALLOC and ASan/MSan settings
2018#76167Cross-request mbstring stale pointerSame-worker GDB/watchpoint evidence
2018#76846 · subsequent Nikita Popov analysisObject-store allocation and partial stateFixed historical positive control
2019CVE-2019-11043 · neex research · Orange Tsai analysisFPM path calculation and memory corruptionSpecific nginx/FPM configuration required
2019#78793 · Nikita PopovEXIF and MemorySanitizerASan-negative does not imply fixed
2019#78876Multipart/OOM cleanupDistinguish resource retention/DoS from UAF
2020#79760 · Nikita PopovGC/refcount lifetime under OOMNot proof of current RCE
2021PR #6903 · Nikita PopovDeferred error handlers and VM safepointsPrototype does not mean merged fix
2022#10026SOAP caught bailout and GC protectionInvariant violation is not itself proof of exploit
2023#12073Partial closure initialization on OOMCompare exact pre- and post-fix versions
2024#14083Allocator hardening proposalsDesign discussion rather than CVE
2024#16726Error-handler re-entrancy and ASan UAFRelated to umbrella issue #20018
2024–25CVE-2024-11235 official advisoryUAF during request shutdownEstablished fixed-version comparator
2024–25Quarkslab audit resultsPHP core security reviewAudit findings are not automatically later CVEs
2025FlowFusion paper · repositoryDataflow-guided PHP test generationReported research performance, not replicated here
2025#20018Umbrella discussion of delayed error handlersIssue count is not distinct root-cause count
2026#22061 · PR #22710Destructor bailout during HashTable cleanupDistinguish proposal from merged release
2026Calif PHP UAF researchSerializable re-entrancyRemote applicability depends on application context
2026#24361 · SOAP PR #24366Opcache caught bailout/GC protectionPR #24366 addresses SOAP paths; unmerged on review date
2026PHP2Shell advisory 109618, 109619 · Wiz analysisOOM/bailout and cross-request lifetimeSeparate official impact from independent claims

New reports #24481 and #24532 (unserialization re-entrancy/teardown), and #24492 (hard-memory-limit termination regression) were useful triage candidates on the review date. Their existence does not establish independent, unpatched RCEs.

Recognizing discoverers, researchers, and maintainers accurately

Credits are organized by original discovery, independent analysis, core remediation, auditing, fuzzing, disclosure coordination, and support. This is a selected provenance map, not a complete roll of everyone who has contributed to PHP.

AreaIndividuals or organizationsDocumented contribution and primary source
Early memory-safety findingsTaoguang ChenPHP GC/destructor bug #72530 and related reporting
PHP 7 unserializationYannay Livneh and the Check Point teamOriginal PHP 7 vulnerability research
Independent bug reportsChris YoungPHP issue #74103
PHP-FPM discoveryEmil Lerner (neex)CVE-2019-11043 research and proof-of-concept repository
PHP-FPM independent analysisOrange TsaiSeparate follow-up technical analysis
Allocator researchCharles Fol (cfreal)Black Alps 2022 PHP allocator security presentation
PHP engine design and fixesNikita PopovDeferred error-handler prototype #6903 and core work
PHP-side 2024 core audit contributorsJakub Zelenka, Arnaud Le Blanc, Niels Dossche, Ilija Tovilo, Stas Malyshev, Dmitry Stogov, Derick Rethans, Roman PronskiyPHP Foundation’s official audit acknowledgments, not a claim that all authored one 2026 patch
2024 Quarkslab security auditAngèle Bossuat, Julio Loayza Meneses, Mihail Kirov, Sébastien Rolland, Ramtine Tofighi ShiraziFive original Quarkslab article coauthors
2025 FlowFusionYuancheng Jiang, Chuqi Zhang, Bonan Ruan, Jiahao Liu, Manuel Rigger, Roland H. C. Yap, Zhenkai LiangSeven authors of the USENIX Security paper
2026 Calif / PHP2ShellRyan APHP Foundation’s August 11 disclosure chronology and direct acknowledgment
2026 OpenAI Codex SecurityAmy BurnettExplicitly thanked by the PHP Foundation; individual first-discovery or patch authorship is not inferred
2026 Wiz ResearchSagi Tzadik, Shir Tamari, Nir Ohfeld, Tomer SchwartzFour bylined authors of Wiz’s PHP2Shell research
2026 security operations/hardeningVolker Dusch, Alexandre Daubois, Daniel Scherzer and PHP security teamPHP Foundation account of triage, coordination, and hardening, distinct from first discovery
Audit coordination and fundingOSTIF, Sovereign Tech AgencyPHP Foundation 2025 acknowledgment; names Amir Montazery, Derek Zimmer, Helen Woeste at OSTIF and Abigail Garner at STA
Releases and research supportPHP release managers, distribution/LTS package maintainers, sponsors, Alpha-Omega, OpenAI, Anthropic, and othersPHP Foundation 2026 acknowledgment; funding and tooling are not vulnerability first-discovery credits

Earlier foundations matter as well. Stefan Esser’s Hardened-PHP and Suhosin research predates the 2016–2026 period and should be credited as background rather than placed under a fabricated timeline date.

The PHP Foundation separately records Calif’s August 11 report, OpenAI’s independent report and subsequent additional work, and Wiz’s August 24 report. Those findings should not be merged into one exclusive personal credit. The absence of someone’s name here does not diminish their work, and the acknowledgment does not imply endorsement of this article.

The Quarkslab audit and the later 2026 security response

The PHP Foundation’s 2025 audit summary describes the Quarkslab core review. Secondary summaries, including OSTIF’s publication, may categorize severities somewhat differently. Before republishing a precise severity breakdown, it is better to reconcile individual findings against the final audit revision.

The Foundation’s October 2026 account describes compatibility, ecosystem impact, availability, and decision-process difficulties in reaching an OOM-related security fix. An earlier audit finding, a warning signal recognized during remediation, and a later concrete CVE should not be collapsed into the same discovery.

From historical records to falsifiable experiments

A research corpus becomes more valuable when each historical record contains:

  • Fix lineage: original source and report date, fix PR/commit, affected versions, and release branches carrying the fix.
  • Execution prerequisites: PHP version, build/allocator, SAPI, extensions, and whether same-worker execution matters.
  • An appropriate observer: ASan, MSan, GDB/watchpoint, Valgrind, or a PHP-level GC invariant, along with whether that observer actually ran.
  • Independent evidence levels: reached, triggered, detected, attackability assessed, and patch verified.
  • Evaluation independence: a public regression set for already-understood defects versus a separate, preselected, tool-frozen blind hold-out set.

For instance, #78793 motivates an MSan-positive comparator, #76167 a worker-lifetime watchpoint, #10026 a GC-invariant test, and #76846 / #12073 a failure-atomicity before/after comparison. An observer that was never executed cannot contribute a negative test result.

The Magma benchmark motivates separating reach, trigger, and detection; StateAFL motivates internal server-state observations; and FuzzBench motivates controlled comparisons and independent repetitions. These are methodological references, not third-party confirmations of a particular php2shell result.

These notes are a source-based research map, not a claim that all 58 corpus entries have been independently reproduced on every release or that an open issue proves current exploitability. They distinguish public-source interpretation from observations already documented in the laboratory; no additional full PHP-FPM/ASan campaign was run solely for this article.

Main essay · php2shell repository · Fuzzing #2 · CoreGuard #3 · Corpus #4 · Verdicts #5

Potentially new, nonpublic PHP vulnerabilities should be disclosed responsibly to the PHP security team before publishing exploitation details. Corrections to sourcing, attribution, and technical interpretation are welcome.