Ocultar malware en SVG: una nueva amenaza para los NFT
En Tozetta hemos descubierto una nueva forma de ocultar malware en archivos SVG. Esto tiene un gran impacto en la ciberseguridad.
Con los tokens no fungibles (NFT) como el arte digital, los coleccionables y otros activos digitales, no solo vemos aplicaciones innovadoras, sino también amenazas emergentes. Uno de los desarrollos más preocupantes que hemos descubierto es un fenómeno nunca antes visto: el contrabando de malware en archivos SVG (Scalable Vector Graphics), que permite a actores malintencionados ocultar código dañino, sin ser detectados, dentro de imágenes aparentemente inofensivas.
¿Qué es el contrabando de malware en SVG?
SVG-smuggling is een exploit techniek waarbij kwaadaardige code (malware) in de code wordt gestopt in bestandstypen die normaal gesproken als veilig worden beschouwd. SVG's zijn bijzonder aantrekkelijk voor cybercriminelen omdat ze zowel beeld- als code-elementen kunnen bevatten. Door bijvoorbeeld JavaScript te embedden, kunnen aanvallers schadelijke scripts verbergen die worden geactiveerd wanneer de SVG wordt geopend of weergegeven in een webbrowser. Hieronder een voorbeeld van een geïnfecteerde SVG:
SVG-Smuggler: hemos creado este script de Python que codifica un archivo en una cadena Base64 y lo integra en un archivo SVG. Cuando el SVG se abre en un navegador web, el script activa automáticamente la descarga del archivo original.
Por qué los NFT son una forma ideal de distribuir malware
SVG-smuggling is een redelijk onbekend fenomeen, helemaal de combinatie NFT's hebben wij nog niet eerder gezien. NFT's, die vaak op blockchain-platforms zoals Ethereum worden gehost, bieden een uniek voordeel voor cybercriminelen:1. Onuitwisbaarheid: Zodra een NFT is geüpload naar de blockchain, kan deze niet meer worden verwijderd. Dit betekent dat de ingebedde malware permanent beschikbaar blijft, zelfs als de oorspronkelijke maker de NFT probeert te verwijderen.2. Anonimiteit: Blockchain-transacties zijn pseudoniem, waardoor het moeilijk is om de identiteit van de aanvaller te traceren.3. Verspreiding: NFT's worden vaak gedeeld en verhandeld op verschillende marktplaatsen, wat de verspreiding van de geïnfecteerde SVG vergroot.
¿Cómo funciona el despliegue de un NFT con una carga útil de malware SVG?
Tras crear un archivo SVG con una carga útil (payload), este archivo se puede subir a un mercado de NFT. Cuando un usuario abre el NFT, el malware incrustado se descarga automáticamente y puede ejecutarse. Hemos creado el smart contract de Solidity para desplegar el NFT que contiene el SVG malicioso, que se encuentra a continuación.
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, '"}' ) ) ) ) ); } }
Este script se encarga de subir el archivo SVG a la blockchain. El siguiente script se encarga de crear la colección de NFT e insertar el SVG:
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)); } }
El enlace al repositorio completo y la explicación se encuentran aquí: Malicious-NFT
Una prueba de concepto EN VIVO
Para esta prueba de concepto, creamos una prueba de concepto en vivo en OpenSea. En cuanto un usuario abre el NFT, el malware (falso) incrustado se descarga automáticamente y podría llegar a ejecutarse.
https://opensea.io/assets/base/0x5fa7f34b32be7d53396e9d07e2d2a7c59273946c/0
Consecuencias para la blockchain y la comunidad
La integración de malware en los NFT puede tener consecuencias de gran alcance: 1. Riesgos de seguridad: los usuarios pueden descargar malware sin querer y llevar a cabo acciones de ingeniería social, lo que puede provocar robo de datos, compromiso del monedero de alguien, infiltración en el sistema y otras actividades dañinas. 2. Pérdida de confianza: el aumento de los incidentes de seguridad puede socavar la confianza en las plataformas de NFT, lo que puede perjudicar al mercado en su conjunto.
Conclusión y pruebas de concepto
El contrabando de malware en SVG es una amenaza nueva y todavía poco conocida dentro del mundo de los NFT. Dado que es probable que la popularidad de los NFT siga aumentando, tanto desarrolladores como usuarios deben tomar medidas proactivas para garantizar la seguridad y proteger la integridad de las plataformas blockchain. Mediante la concienciación, herramientas de seguridad avanzadas y una vigilancia continua, podemos hacer frente a esta amenaza y promover un futuro digital más seguro.
Para una documentación e información más completas:
-
SVG-Smuggler: este script de Python codifica un archivo en una cadena Base64 y lo integra en un archivo SVG. Cuando el SVG se abre en un navegador web, el script activa automáticamente la descarga del archivo original.
-
Malicious-NFT: este repositorio muestra cómo se puede subir un SVG malicioso como NFT a la blockchain. Cuando un usuario abre el NFT, el malware incrustado se descarga automáticamente y podría llegar a ejecutarse.
-
Live Malware NFT Demo: primera PoC de malware SVG en la blockchain
¡Mantente al día sobre los ciberriesgos!
Cada semana, nuestros hackers comparten sus conocimientos y experiencia. Al suscribirte a la Actualización de vulnerabilidades, recibirás semanalmente un consejo de un hacker ético sobre vulnerabilidades en software y sistemas. Al entender cómo ven los atacantes a tu organización, esperamos ayudarte más en el mundo de la ciberseguridad. ¿Quieres leer este tipo de blogs cada semana? ¡Suscríbete más abajo!
Pero si quieres saber más sobre cómo poner de manifiesto de forma estructural las vulnerabilidades en software y sistemas, lee más sobre nuestra solución Hacking as a Service. Además del pentesting regular, también ofrecemos una herramienta de monitorización de seguridad que escanea a diario vuestras aplicaciones web y/o red interna en busca de estos numerosos CVE.
O lee más sobre Hacking as a Service >>