{"id":"CVE-2026-92287","kind":"vulnerability","aliases":["CVE-2026-92287"],"related":[],"title":"Apache Parquet and PyArrow: file-controlled KMS URL can leak tokens to attacker host","description":"Pass-through of unvalidated KMS URLs to KMS clients in Apache C++ Parquet and PyArrow versions 4.0.0 to 25.0.1.\n\n\n\n\nThis affects users who read Parquet files and configure Parquet decryption properties with a KmsClient implementation.\n\n\n\n\nOn the reader side, the KMS URL can be application-controlled (specified in the KmsConnectionConfig) or file-controlled.\nIf the user does not leverage application control for this parameter, a file-controlled KMS URL is forwarded to a pluggable KmsClient implementation. \nIf the KMS implementation does not perform host validation and makes use of the provided KMS URL, a KMS token can be sent to a malicious host set by an attacker in the file. \n\n\n\n\nUsers are recommended to upgrade to version 26.0.0, which disables this behavior by default and requires that users opt-in to it by enabling the read_kms_url flag in the DecryptionConfiguration. Users of affected versions are recommended to either specify the KMS URL in the KmsConnectionConfig when reading files, or ensure any KmsClient implementations validate received KMS URLs. Users that opt-in to file-controlled KMS URLs in version 26.0.0 and later must ensure KmsClients validate KMS URLs.","summary":"Apache Parquet C++ and PyArrow 4.0.0 through 25.0.1 forward a KMS URL taken from the Parquet file itself to a pluggable KmsClient. If that KmsClient does not validate hosts, a KMS token can be sent to an attacker-chosen server.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["apache-parquet","encryption","kms","package","pyarrow","python"],"not_affected_if":["kms-url-set-in-config","managed-hosting","unencrypted-parquet"],"how_to_check":"- Check the installed `pyarrow` version with `python -c \"import pyarrow; print(pyarrow.__version__)\"`, affected range 4.0.0 to 25.0.1\n- Search code for Parquet decryption using a custom KmsClient implementation and check whether `KmsConnectionConfig` sets a KMS URL explicitly","fix":"- Upgrade PyArrow and Apache Parquet C++ to `26.0.0` or later, where file-controlled KMS URLs are disabled by default\n- On affected versions, set the KMS URL in `KmsConnectionConfig` when reading files, or make the KmsClient validate received KMS URLs","status":"open","published_at":"2026-10-20T09:17:12+00:00","first_seen_at":"2026-10-23T21:57:20+00:00","triaged_at":"2026-10-25T05:04:55+00:00","updated_at":"2026-10-25T05:04:55+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T05:04:55Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade PyArrow and Apache Parquet C++ to `26.0.0` or later, where file-controlled KMS URLs are disabled by default\n- On affected versions, set the KMS URL in `KmsConnectionConfig` when reading files, or make the KmsClient validate received KMS URLs","reach":"unknown","title":"Apache Parquet and PyArrow: file-controlled KMS URL can leak tokens to attacker host","impact":"medium","summary":"Apache Parquet C++ and PyArrow 4.0.0 through 25.0.1 forward a KMS URL taken from the Parquet file itself to a pluggable KmsClient. If that KmsClient does not validate hosts, a KMS token can be sent to an attacker-chosen server.","category":"package","nicknames":[],"who_cares":["pyarrow","apache-parquet","python","encryption","kms"],"confidence":0.6,"needs_auth":"no","worst_case":"KMS authentication token sent to attacker-controlled host","analyst_note":"Confirm the exact fixed behavior and whether any PyArrow or Parquet C++ patch releases exist below 26.0.0, using the Apache advisory linked from the NVD entry.","how_to_check":"- Check the installed `pyarrow` version with `python -c \"import pyarrow; print(pyarrow.__version__)\"`, affected range 4.0.0 to 25.0.1\n- Search code for Parquet decryption using a custom KmsClient implementation and check whether `KmsConnectionConfig` sets a KMS URL explicitly","needs_analyst":true,"not_affected_if":["unencrypted-parquet","kms-url-set-in-config","managed-hosting"],"who_is_affected":"Teams that read encrypted Parquet files with Parquet decryption properties and a custom KmsClient implementation are exposed, when the KMS URL comes from the file. Applications that pin the KMS URL in KmsConnectionConfig, or that only read unencrypted files, can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.00073,"input_tokens":3644,"output_tokens":731,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':17A,20A '-92287':18A,21A '25.0.1':37B,90C '26.0.0':192C,258C '4.0.0':35B,88C 'affect':92C,220C 'apach':1A,23B,30B,82C 'apache-parquet':22B 'applic':117C,133C 'application-control':116C 'attack':14A,68B,181C 'attacker-chosen':67B 'behavior':196C 'c':32B,83C 'chosen':69B 'client':80C 'configur':99C 'control':7A,118C,126C,134C,141C,253C 'cve':16A,19A 'decrypt':101C 'decryptionconfigur':217C 'default':198C 'disabl':194C 'either':225C 'enabl':209C 'encrypt':25B 'ensur':237C,262C 'file':6A,46B,97C,125C,140C,184C,235C,252C 'file-control':5A,124C,139C,251C 'flag':214C 'forward':38B,145C 'host':15A,58B,158C,177C 'implement':106C,150C,154C,240C 'kms':8A,26B,40B,60B,76C,79C,112C,142C,153C,166C,169C,212C,228C,243C,254C,265C 'kmsclient':51B,54B,105C,149C,239C,263C 'kmsconnectionconfig':122C,232C 'later':260C 'leak':11A 'leverag':132C 'make':161C 'malici':176C 'must':261C 'opt':204C,248C 'opt-in':203C,247C 'packag':27B 'paramet':137C 'parquet':2A,24B,31B,45B,84C,96C,100C 'pass':72C 'pass-through':71C 'perform':157C 'pluggabl':50B,148C 'properti':102C 'provid':165C 'pyarrow':4A,28B,34B,86C 'python':29B 'read':95C,211C,234C 'reader':109C 'receiv':242C 'recommend':187C,223C 'requir':200C 'sent':64B,173C 'server':70B 'set':178C 'side':110C 'specifi':119C,226C 'taken':42B 'token':12A,61B,170C 'unvalid':75C 'upgrad':189C 'url':9A,41B,77C,113C,143C,167C,213C,229C,244C,255C,266C 'use':162C 'user':93C,129C,185C,202C,218C,245C 'valid':57B,159C,241C,264C 'version':87C,191C,221C,257C","nicknames":[],"mitigations":[],"who_affected":"Teams that read encrypted Parquet files with Parquet decryption properties and a custom KmsClient implementation are exposed, when the KMS URL comes from the file. Applications that pin the KMS URL in KmsConnectionConfig, or that only read unencrypted files, can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-20T09:17:12+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-92287","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-92287","severity":null,"published_at":"2026-10-20T09:17:12+00:00","modified_at":"2026-10-20T19:35:38+00:00","first_seen_at":"2026-10-23T21:57:20+00:00","fetched_at":"2026-10-23T22:28:57+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}