REDHAT-BUG-2567260: Medium severity pypi/pulpcore vulnerability

Published Nov 5, 2026
·
Updated

HeaderContentGuard.permit in pulpcore/app/models/publication.py compiles jqfilter with jq.compile and does not restrict jq’s env builtin.

When jqfilter is set, permit base64-decodes the named request header, parses it as JSON, runs the stored filter, and compares the result with headervalue using !=. A mismatch raises PermissionError. Handler.permit in pulpcore/content/handler.py calls permit for the distribution’s content guard and turns PermissionError into a denial. HeaderContentGuardSerializer accepts jqfilter as an unvalidated string. Only JSONDecodeError is caught around the jq call.

The allow-or-deny result is an oracle for the filter output. A filter that uses env reads the content-app process environment, so the caller can recover that environment, including PULPSECRETKEY and PULPDATABASESdefaultPASSWORD when those values were exported into the process. A value that exists only in the settings file is not part of that environment.

The caller must be able to create or change a header content guard and attach it to a distribution. Creation requires core.addheadercontentguard, which core.headercontentguardcreator grants. The creator hook assigns core.headercontentguardowner. Attaching the guard is a change to the distribution’s contentguard. The content request that runs the filter needs no further account. Once the guard is attached, any client who can request that content receives the same allow-or-deny result.

Likely introduced in pulpcore 3.39.0 by commit 7a02719e9. The dependency at introduction was jq>=1.6.0, which provides the env builtin. The same jq.compile call is still present on main at publication.py:548.

Affected Software

1 affected component
pypi/pulpcore>=3.39.0

Event History

Nov 5, 2026
Data Sourced
via Red Hat·11:43 AM
DescriptionSeverityAffected Software

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203