WHAT BRIFF SENT
Urgent email · +28 min after “Upcoming Critical PHP Security Release” appeared
Replay · real items, sample repos, no LLM involved
Two critical PHP remote code execution flaws leaked before their coordinated release. php.net gave a day's notice, then shipped 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Three sample repos: a floating php:8.3-fpm image, a pinned php:8.1.31-apache image on an end-of-life line, and an api pinned to php 8.4.26 in .tool-versions. Below are the 3 emails Briff would have sent, each rendered by the production template.
Dockerfile: FROM php:8.3-fpm
composer.json: {"require":{"php":"^8.3"}}Scanned: php 8.3+ (composer.json require.php), php 8.3 (Dockerfile)Dockerfile: FROM php:8.1.31-apacheScanned: php 8.1.31 (Dockerfile)
.tool-versions: php 8.4.26Scanned: php 8.4.26 (.tool-versions)
WHAT HAPPENED
Four days before disclosure, while the flaws were still under embargo.
WHAT HAPPENED
It quotes the CVE numbers and a 22 October disclosure date; the post is deleted.
WHAT HAPPENED
Scheduled for Wednesday 21 October, 14:00 UTC. Two critical vulnerabilities, both CVSS v4.0 9.2; no versions or details yet.
WHAT BRIFF SENT
Urgent email · +28 min after “Upcoming Critical PHP Security Release” appeared
WHAT HAPPENED
For every plan, Free included; described as a stopgap, not a fix.
WHAT HAPPENED
Both critical, CVSS 9.2, patched in 8.2.35, 8.3.36, 8.4.27 and 8.5.12.
WHAT HAPPENED
CVE-2026-109618 and CVE-2026-109619, CVSS 9.2. Every web SAPI is at risk (PHP-FPM, mod_php, php-cgi, FrankenPHP, LiteSpeed); mod_php is the worst. PHP 8.1 and older get no release.
WHAT BRIFF SENT
Urgent email · +26 min after “PHP security advisory: RCE via stale global state (CVE-2026-109619)” appeared
WHAT BRIFF SENT
Weekly bulletin · scheduled run, Monday 04:00 UTC
The items are the ones the sources published, with their dates, read by the same parsers and extractors Briff runs in production. The worker's hourly collect is replayed with a fake clock: an item is collected by the first run after it appeared, matched to the sample repos by runtime, and the urgent pass and the weekly assembly run unchanged. Urgent emails never use a model. In the weekly bulletin the model writes the headline and one line; here the item title stands in, and the action is the deterministic one in both cases.
Run it yourself:
npm run replay -- php2shell --out docs/replay/php2shell.html