Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,31 @@ are not limited to):

- Malicious `unserialize()` inputs.

- Memory exhaustion from a size the input declares, where `memory_limit`
refuses the allocation and only the current request dies. Reaching a limit
that works as designed is a robustness issue at best.

# Writing a Report We Can Act On

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a bit unsure about this document diverging more and more from https://github.com/php/policies/blob/main/security-classification.rst. Originally we just copied a few section and reworded them, because we were hoping LLM tools would read them.

@alexandre-daubois alexandre-daubois Sep 7, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you think that make more sense, I'd be fine creating a PR in php/policies to add this part there instead


We spend most of a triage rebuilding what a report left out, so cover these
points:

- Reproduce it on a supported branch, through a normal PHP entry point. A crash
is enough, you do not need to write a working exploit. A crash reached only
from a custom fuzzing harness, or by calling an internal C function, leaves
reachability open.

- Tell us if you ran under a sanitizer, a debug build or `USE_ZEND_ALLOC=0`.
The last one turns every `emalloc()` into a bare `malloc()` and drops the
`memory_limit` check, so we read the trace differently.

- Skip the theatrics. Drop the impact essay, send a short reproducer with the
few lines that matter, and make each point once.

- Separate what you observed from what you inferred. A rough CVSS is fine, we
re-derive severity anyway, but a heap corruption that turns out to be a crash
costs us a full analysis.

# Vulnerability Policy

Our full policy is described at
Expand Down