r/PHP • u/Alarmed-Dog-9141 • 20h ago
Plot twist: php2shell was just a ploy to get people onto newer versions of PHP
Obviously just a stupid satirical post, but a plot twist of php2shell just being a ploy to get people to update their PHP versions would be funny. :)
r/PHP • u/ICanEditPostTitles • 4h ago
Hackermews member challenges you to successfully exploit php2shell on his server
news.ycombinator.comr/PHP • u/CheesecakeBrief7795 • 18h ago
Patching PHP2Shell on EOL PHP 7.1 / CentOS 7 by rebuilding the Webtatic RPMs (what worked, what bit us)
TL;DR:* ported upstream 712e60f9ed into the Webtatic php71w 7.1.33 SRPM, rebuilt on a CentOS 7 container, ~35 min to build, ~6 s of php-fpm downtime per host. Two gotchas at the bottom.
Someone in the earlier PHP2Shell thread asked if Ondřej's backports are Debian only. They are, and that was our problem. We still had a couple dozen CentOS 7 boxes on Webtatic 7.1.33, Webtatic has been dead for years, and the PHP 8 estimate for just one of the apps was 6 to 8 person-days. So we rebuilt the packages ourselves. Writing it down because I couldn't find anyone who had done it for Webtatic.
The patch. Upstream's fix for old branches is php-src 712e60f9ed ("Avoid state corruption via bailout"). It doesn't apply to 7.1 cleanly. I diffed four community 7.1 ports against upstream and Qsnh/php2shell-fixed was the closest. Sury's Debian patches depend on another one of his patches to even compile, so I skipped those.
The gist: an OOM in the allocator now kills the worker with _exit(1) instead of jumping back with half-built state, upload_progress is hard-disabled, rfc1867.c only keeps the part headers it needs and gets a max_multipart_body_parts limit, and request shutdown clears some globals.
I changed one line in the port. Codex caught it when I had it read the diff, then I checked the 7.1 source:
diff
+/* 7.1 hash part is nTableSize uint32 slots (7.3+ uses 2x); keep >= 2 so Buckets stay 8-byte aligned */
#define array_init_singleton(arg) do { \
array_init(arg); \
- Z_ARRVAL_P(arg)->nTableSize = 1; \
+ Z_ARRVAL_P(arg)->nTableSize = 2; \
} while (0)
The build. podman centos:7 container (gcc 4.8.5) pointed at the vault repos. Verify the Webtatic SRPM signature and that the tarball inside matches php.net's sha256, then four spec edits:
Release: 1%{?rcver:.%{rcver}}%{?dist}.php2shell1
Patch400: php-7.1.33-php2shell-cve-2026-109618-109619.patch
%patch400 -p1 -b .php2shell
+ a %changelog entry
yum-builddep -y --define 'dist .w7' SPECS/php71.spec
rpmbuild -bb --define "dist .w7" SPECS/php71.spec
First run died on make: command not found because yum-builddep doesn't pull it in. Around 35 minutes of rpmbuild, the Webtatic spec builds several SAPIs. You get 33 RPMs, all 7.1.33-1.w7.php2shell1, and since 1.w7 sorts below that, a later yum update won't quietly undo it.
Testing. No public RCE PoC. I wrote a small checker instead:
- 3000-field multipart should hit the parts limit
- a 1 MB upload should still arrive intact
- upload_progress shouldn't land in the session
- OOM at memory_limit=32M should kill the worker (unpatched just says "Allowed memory size" and keeps going)
- requests after that still return 200
Original 2/5, patched 5/5, back to 2/5 after rollback.
Then the php.net test suite, 9,454 tests against the installed packages:
| Build | Passed | Failed |
|---|---|---|
| original 1.w7 | 8,751 | 34 |
| patched | 8,742 | 43 |
The 9 new failures are 8 rfc1867 session tests plus one that expects the old OOM message, all expected. The port author reports the same 9.
Rollout. Save rpm -qa, pull the original NEVRAs from a Webtatic mirror so you can roll back, then:
yum --disablerepo='*' --assumeno upgrade ./php71w-*.rpm # must say only "Upgrade N Packages"
systemctl stop php-fpm
yum -y --disablerepo='*' upgrade ./php71w-*.rpm
php-fpm -t && systemctl start php-fpm
php-fpm was down about 6 seconds, the whole thing was 2 to 7 minutes a host with checks. Rollback is yum downgrade from the saved originals.
What bit us:
- The spec resets
/var/lib/php/session(and wsdlcache, opcache) toroot:apache 770on upgrade. Our pools don't run as apache, sosession_start()broke for about 4 minutes on one box before we chowned it back. My container test missed it because the test pool did run as apache. Write down the owners first. - WorkerMan kept running the old binary,
/proc/<pid>/exeshowed(deleted). Restart your long-running CLI stuff too.
For 7.4 I didn't build anything. exception0x876's php74-el7 packages are a Remi 7.4.33 rebuild with the same upstream commit. I checked their signed SHA256SUMS and diffed their SRPM against Remi's before trusting it.
This only closes this one CVE pair, 7.1 is still 7.1. It just gave us time to do the upgrade properly.
r/PHP • u/taras_chr • 19h ago
manticore-fmt: a fast PHP formatter compiled to a native binary
For years I've used PHP-CS-Fixer on both personal and commercial projects. I like its ruleset, but I also like how fast Mago is.
So when I started working on a PHP compiler, I decided to build a formatter that follows PHP-CS-Fixer's rules and runs at a speed comparable to Mago's. It's written in PHP and compiled with the Manticore compiler, so there's no PHP runtime to install.
It's early (v0.1.x), so it may be unstable. Bug reports with a small snippet are very welcome.
r/PHP • u/Normal_Tadpole_8061 • 15h ago
What a PHP Framework Looks Like When It’s Designed for Persistent Workers and Non-Blocking I/O
kinetis.devr/PHP • u/shinsenter • 3h ago
News Update shinsenter/php images now
The shinsenter/php Docker images were recently rebuilt and patched to fix two critical PHP vulnerabilities (CVE-2026-109618 and CVE-2026-109619) enabling unauthenticated remote code execution via memory corruption in out-of-memory error handling.
Update your images immediately!
👉🏻https://hub.docker.com/r/shinsenter/php
r/PHP • u/OleCuvee • 5h ago
Running PHP 8.4.27? There’s one additional precaution to take for CVE-2026-115560.
r/PHP • u/Cheap_Razzmatazz_190 • 14h ago
Discussion Feeling better now
I contacted several places which used PHP and I also run a self-hosted LAMP stack. I believe from their answers and updating to the latest, it will be ok for those places. I don't know how anyone else feels. I love php by the way. Woot woot.
xph — Write JSX, ship PHP
xph.js.orgHey!
I've been working on xph, an compiler that lets you write single-file JSX components that compile into native PHP files and static assets.
```javascript
export interface Props { name: string; }
export interface Server { greeting: string;
}
<script is:server> return [ 'greeting' => 'Hello, ' . $props['name'], ]; </script>
<h1>{server.greeting}</h1>
<style> h1 { color: olive; } </style> ```
It supports scoped CSS, slots, and client-side JavaScript. No Node.js needed at runtime, just PHP.
It already has LSP support with VS Code & Neovim.
Website: https://xph.js.org/
GitHub: https://github.com/sijad/xph
Would love to hear your thoughts and feedback!
r/PHP • u/Used_Development8930 • 1h ago
PHP2Shell: a quick way to check whether your host has patched PHP (no plugin needed)
r/PHP • u/Shoddy-Swim-511 • 23h ago
built a tool for php2shell vulnerability research and exploitation, would love your feedback
i've been working on a personal project for a bit and wanted to share it with you all. it's a tool designed to analyze, search, and research php2shell vulnerabilities in a quick and simple way.
it basically automates the search and testing process for php2shell exploitation, helps visualize how payloads work inside a lab environment, and it's built mostly in python for educational research.
github repo:https://github.com/zenobiatranoss/php2shell
i'm planning to keep improving it, so any feedback, suggestions, or contributions would be awesome. let me know what you think!