Airflow, Feast, and a Poisoned Feature Store: Patch Order for Data Teams
Strip out the printers and VPNs and this advisory is a security audit of a modern ML platform. Two attack patterns outlive the patch list.
First, the feature store as a silent poison vector. Feast's /save-document endpoint (CVE-2026-23537, 9.1) allows unauthenticated arbitrary JSON writes, corrupting the artifacts feeding live predictions. The thing dashboards don't tell you is that poisoned features degrade metrics gradually. By the time AUC drifts you are debugging the model, not the store. Patch, require auth on writes, add checksums and audit logging on production features.
Second, deserialization as the recurring root cause. Airflow <3.3.0 (CVE-2026-33264, 9.8) gives RCE via malicious triggers in BaseSerialization.deserialize(). The orchestrator inherits cloud creds, warehouse access, and model-registry write. That is the highest-blast-radius item in the set.
The rest are dev-grade tools never hardened for untrusted networks: txtai /reindex (9.8), LLaMA-Factory RCE via a malicious model path (9.8), IBM Langflow (7 CVEs, 9.1–10.0), Flowise's hardcoded secret enabling session forgery (9.1), Crawl4AI command exec (10.0). LLaMA-Factory is the tell: the model artifact itself is now a code-execution surface. Extend supply-chain threat models past Python deps into the weights.
From three other sources: HalluSquatting weaponizes a tolerated LLM failure mode. Coding agents hallucinate the same plausible nonexistent package names; attackers pre-register them on npm/PyPI with reverse-shell installers. This is not patchable. It is inherent to autoregressive generation, so deterministic gating is the only defense.
Caveat: CVSS is theoretical. Only two CVEs in the broader advisory are confirmed actively exploited via CISA KEV. The ML ones are disclosed-not-yet-weaponized, but the disclosure-to-exploit gap for internet-facing RCE is short.
What to do
Upgrade Apache Airflow to 3.3.0+ today and audit every trigger source feeding BaseSerialization.deserialize()
Inventory every internet- or shared-network-reachable ML service (Feast, txtai, LLaMA-Factory, Langflow, Flowise, Crawl4AI) this week and firewall, authenticate, or take offline until patched
Add a lockfile + dependency-allowlist gate to any agent/CI install path this sprint so a hallucinated package name can never trigger a real registry pull