Skip to content

Change session.upload_progress.enabled from default-on to default-off #24648

Open

Description

@Sainan

Given this feature is pretty much unused in most code, and it clearly wasn't well-tested prior to this week, I think it makes sense for it to not be enabled by default 😄 (like what happened to my beloved short_open_tag 😞)

Activity

  1. srayuth089 commented on Oct 25, 2026

    @srayuth089

    +1 with measured data — we ran the A/B on this exact knob in our lab (php:8.4.26-apache, single-worker prefork, public Chain D PoC, container restarted per trial):

    session.upload_progress.enabled exploit success (N=5) failure point
    On (current default) 5/5 (100%) —
    Off 0/5 (0%) dies at the heap-leak stage, every trial

    (An earlier 10-trial run on the same lab with the default gave 10/10, so the On-side rate is stable across 15 trials total; raw TSVs available.)

    In other words the default isn't just "extra attack surface" in the abstract sense — it is the single config knob that determines whether the public pre-auth chains function at all, because every published chain (both CVEs) parks its OOM/stale-state work inside the rfc1867 upload-progress session window, which runs before application code.

    One honest scoping note for the record, so the change isn't oversold: flipping this default off removes the upload-progress/session chains (the pre-auth entry point of all published chains for these two CVEs), but it does not by itself harden the multipart parser generally — the recent header-amplification technique (duplicate part headers → ~50x memory amplification, small bodies OOMing large memory_limit) lives in the shared rfc1867 parsing path and still reaches OOM with the feature off. The 8.4.27+/8.5.12 patch addresses that side (unknown-header filtering + streaming post_max_size enforcement).

    So: default-off = correct defense-in-depth decision, empirically the difference between a working pre-auth chain and a dead one, and it costs nothing to the (rare) applications that don't use the feature — they can opt back in with one ini line.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions