DEV Community

Cover image for Pickle.loads() Executando Código Arbitrário
cardoso
cardoso

Posted on

Pickle.loads() Executando Código Arbitrário

O módulo pickle do Python fornece mecanismos para serialização binária de objetos, onde o "pickling" transforma estruturas de objetos em fluxos de bytes e o "unpickling" restaura essas estruturas a partir dos bytes (Python Software Foundation, 2024). No entanto, a própria documentação alerta sobre riscos de segurança significativos.

É aquela amizade boa mas tem detalhes que vai ferrar com você

Nooooossa, que módulo eficiente! Serializa tudo!

Você sabe que vai dar merda

Todo mundo avisa que vai dar merda

A documentação GRITA que vai dar merda

Mas... Ah, dessa vez vai ser diferente!

Foco nobres camaradas....

O pickle é usado por uma razão simples: vai executar o código automaticamente durante a desserialização isso nunca foi um bug é o design que se tornou uma vulnerabilidade.

Vamos ao código principal :

1

stealer = LocalDataCollector()
malicious_pickle = pickle.dumps(stealer) # Serializa o objeto

2

result = pickle.loads(malicious_pickle) # DESSERIALIZAÇÃO = EXECUÇÃO

pickle.dumps(obj): Converte objeto Python para bytes

pickle.loads(bytes): Converte bytes para objeto Python EXECUTANDO CÓDIGO

E lógico um códi completo para testar.

Em cenários reais é criado um tipo de coletor de dados e enviado para algum local ou sequestro dos dados, botnet ou minerar bitcoin as possibilidade são muitas.

Esse é meu primeiro post.

código fonte completo: github.com/cardosource/
teste: ...cardosource/actions/

até mais...

Top comments (0)