{"id":"PYSEC-2026-3850","summary":"Hydra: hydra.utils.instantiate with untrusted config can lead to code execution","details":"## Summary\n\n`hydra.utils.instantiate()` resolves and calls Python objects from config. If an\napplication passes untrusted config to `instantiate()`, an attacker who controls\n`_target_` and its arguments can cause arbitrary code execution in the consuming\nprocess.\n\nHydra is not a network service. Exploitation requires a consuming application,\nlibrary, or user workflow to load attacker-controlled config, CLI overrides, or\nmodel metadata and pass it to `hydra.utils.instantiate()`.\n\n## Details\n\nHydra's instantiate API is designed to construct objects and call functions from\nconfiguration. For example:\n\n```yaml\ncomponent:\n  _target_: package.module.Class\n  arg: value\n```\n\nWhen this config is passed to `hydra.utils.instantiate()`, Hydra resolves\n`_target_` and calls it with the provided arguments.\n\nThis is intended for trusted application configuration. However, if untrusted\ninput controls `_target_`, the config becomes a callable-selection mechanism. A\nmalicious config can select a callable capable of executing code or commands and\nprovide attacker-controlled arguments.\n\nThis issue is the same general class of problem discussed by Unit 42 for\ndownstream AI/ML libraries such as NVIDIA NeMo, where untrusted model metadata\nwas passed into Hydra instantiate:\n\nhttps://unit42.paloaltonetworks.com/rce-vulnerabilities-in-ai-python-libraries/\n\nHydra 1.3.4 includes a blacklist for some dangerous `_target_` values. That\nblacklist is defense-in-depth and is not a complete security boundary. The\nblacklist is not present in the released `hydra-core` 1.3.3 package, so this\nissue should not be described as a bypass of a released 1.3.3 blacklist.\n\n## Impact\n\nA successful attack can execute code in the process that calls\n`hydra.utils.instantiate()`. The impact is limited to the privileges and\nenvironment of that process.\n\nPotential impact includes:\n\n- Reading files, credentials, environment variables, or data accessible to the\n  process\n- Modifying files, outputs, checkpoints, or application state writable by the\n  process\n- Terminating or disrupting the process\n\n## Affected Usage\n\nApplications and libraries are affected when they pass untrusted or semi-trusted\nconfig, model metadata, CLI overrides, or other externally controlled data to\n`hydra.utils.instantiate()` without constraining which targets may be\ninstantiated.\n\nTrusted application-owned configuration is not affected in the same way.\n\n## Remediation\n\nHydra 1.3.4 hardens the existing behavior by adding a blacklist of obvious\ndangerous targets. It is a substantial security improvement, and users remaining\non the 1.3 release line should upgrade to 1.3.4 or a newer version.\n\nThe unreleased Hydra 1.4 development line uses an allowlist-based instantiation\nmodel that fully addresses this vulnerability class. The allowlist must come\nfrom trusted application code or another trusted channel, not from the untrusted\nconfig being instantiated.\n\nApplications that consume untrusted or semi-trusted config should not pass it\ndirectly to `hydra.utils.instantiate()`. They should validate `_target_` values\nagainst a trusted allowlist before instantiation.","aliases":["CVE-2026-68508","GHSA-2cp2-2r3c-7p7r"],"modified":"2026-09-10T12:15:05.604207676Z","published":"2026-09-10T09:44:53.072336Z","references":[{"type":"WEB","url":"https://github.com/hydra-ecosystem/hydra/security/advisories/GHSA-2cp2-2r3c-7p7r"},{"type":"WEB","url":"https://github.com/hydra-ecosystem/hydra/issues/3259"},{"type":"WEB","url":"https://github.com/hydra-ecosystem/hydra/pull/3261"},{"type":"WEB","url":"https://github.com/hydra-ecosystem/hydra/commit/7faad0dcedfb4c0a364aa1067c0080fd6fdf8dca"},{"type":"PACKAGE","url":"https://github.com/hydra-ecosystem/hydra"},{"type":"WEB","url":"https://github.com/hydra-ecosystem/hydra/releases/tag/v1.3.4"},{"type":"PACKAGE","url":"https://pypi.org/project/hydra-core"},{"type":"ADVISORY","url":"https://github.com/advisories/GHSA-2cp2-2r3c-7p7r"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-68508"}],"affected":[{"package":{"name":"hydra-core","ecosystem":"PyPI","purl":"pkg:pypi/hydra-core"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.4"}]}],"versions":["0.1.4","0.1.5","0.1.5rc1","0.10.0","0.11.0","0.11.0rc1","0.11.1","0.11.1rc1","0.11.2","0.11.2rc1","0.11.3","0.9.0","1.0.0","1.0.0rc1","1.0.0rc2","1.0.0rc3","1.0.0rc4","1.0.1","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.1.0","1.1.0.dev1","1.1.0.dev2","1.1.0.dev3","1.1.0.dev4","1.1.0.dev5","1.1.0.dev6","1.1.0.dev7","1.1.0rc1","1.1.1","1.1.2","1.1.2.dev0","1.2.0","1.2.0.dev1","1.2.0.dev2","1.2.0.dev3","1.2.0.dev4","1.2.0.dev5","1.3.0","1.3.0.dev0","1.3.0.dev1","1.3.1","1.3.2","1.3.3"],"database_specific":{"source":"https://github.com/pypa/advisory-database/blob/main/vulns/hydra-core/PYSEC-2026-3850.yaml"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H"}]}