Bug 2529709 (CVE-2026-86593)

Summary: CVE-2026-86593 ipa: FreeIPA: Unauthenticated DoS in session endpoints (login_password, change_password, sync_token) via Unbounded Request Body Read
Product: [Other] Security Response Reporter: mkaminsk
Component: vulnerabilityAssignee: Product Security <prodsec-ir-bot>
Status: NEW --- QA Contact:
Severity: high Docs Contact:
Priority: high    
Version: unspecifiedCC: abokovoy, dhanina, frenaud, ftrivino, rhel-process-autobot, security-response-team, watson-tool-maintainers
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
A flaw was found in FreeIPA. A remote, unauthenticated attacker can exploit this vulnerability by sending oversized request bodies to the `login_password`, `change_password`, or `sync_token` session endpoints. Because these public endpoints read the full declared request body into memory before validating credentials or tokens, sustained oversized requests can occupy all available server worker processes, denying service to the entire IPA HTTP application, including authenticated clients.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2572347    
Bug Blocks:    
Deadline: 2026-11-10   

Description mkaminsk 2026-09-08 07:49:44 UTC
A flaw was found in FreeIPA. The public session endpoints `login_password`, `change_password`, and `sync_token` in `ipaserver/rpcserver.py` call `read_input()` without passing `MAX_REQUEST_BODY_SIZE`, unlike `jsonserver_i18n_messages` (fixed under CVE-2026-73198), so the full declared request body is read into memory before any credential/token validation occurs. The shipped Apache configuration (`install/share/ipa.conf.template`) exposes all three endpoints without authentication via `Satisfy Any` / `Require all granted`, overriding the parent `/ipa` location's `Require valid-user` rule. The default `RequestReadTimeout ... body=30,MinRate=500` slowloris protection in the same configuration does not prevent exploitation: an attacker needs only as many concurrent connections sustaining a trivial ~500 B/s as there are configured WSGI worker processes to occupy the entire shared `WSGIDaemonProcess ipa` pool (confirmed: `threads=1` per process), or alternatively can send a large body at full network speed to bypass the rate check entirely. Because that worker pool is shared by the whole `/ipa` WSGI application, exhausting it denies all IPA HTTP functionality, including the GSSAPI/Kerberos-authenticated paths (WebUI, admin RPC), not only other unauthenticated requests.

This is a distinct instance of the same root-cause class already fixed for `i18n_messages` (CVE-2026-73198) and `/ipa/migration/migration.py` (CVE-2026-73197); the fix for CVE-2026-73198 was scoped only to that single caller and left this defect present in the three session endpoints, contrary to that fix commit's stated assumption that they require authentication.

Reproduced independently in an isolated sandbox against the real, unmodified installed FreeIPA package (freeipa-server-4.12.2-4.fc40): the actual `read_input()` accepted and returned a 64 MiB body with zero rejection in ~0.07s, and the real shipped `/usr/share/ipa/ipa.conf.template` was confirmed to contain the exact `Satisfy Any` / `Require all granted` blocks for all three session locations plus `WSGIDaemonProcess ipa processes=$WSGI_PROCESSES threads=1`.

Comment 1 errata-xmlrpc 2026-11-11 03:56:48 UTC
This issue has been addressed in the following products:

  Red Hat Enterprise Linux 10

Via RHSA-2026:98078 https://access.redhat.com/errata/RHSA-2026:98078

Comment 2 errata-xmlrpc 2026-11-12 01:42:11 UTC
This issue has been addressed in the following products:

  Red Hat Enterprise Linux 9

Via RHSA-2026:98983 https://access.redhat.com/errata/RHSA-2026:98983