Osegi
Seguridad·2 min de lectura

Falsa oferta de trabajo: un ZIP ejecuta malware con git status

Un falso reclutador de Cryptic Heaven envió a un desarrollador un ZIP con la carpeta .git manipulada. Un simple git status puede descargar código malicioso.

A developer's laptop screen showing a terminal running git status next to a ZIP archive named Contract-2026.zip.
Imagen: Хабр

A un desarrollador le escribió por LinkedIn un reclutador de Cryptic Heaven, empresa que supuestamente crea un sistema financiero para tarjetas de crédito cripto. La oferta parecía normal. El ZIP que vino después, no: un simple git status en la carpeta equivocada puede activar la trampa.

Tras pedir detalles, el reclutador le mandó un enlace a un contrato, una descripción del puesto y un proyecto. Llevaba a Contract-2026.zip, con un README.md, un contract.docx y un directorio .git completo, con historial, varias ramas y ajustes locales. El README pedía revisar tres ramas en orden: la vacante, el contrato y el código. El contrato era una plantilla vacía, sin entidad legal, pago ni jurisdicción. La oferta de Smart Contract Developer también estaba casi en blanco.

¿Cómo funciona la trampa de Git?

Git puede ejecutar programas externos, y el atacante preparó dos disparadores. El primero es core.hooksPath en .git/config, que apunta a otra carpeta de hooks (scripts que se ejecutan ante ciertos eventos). Allí había un script post-checkout, que corre tras cambiar de rama. De ahí que el README pidiera saltar entre ramas.

El segundo es un filtro «clean» propio llamado ltr, con el que Git transforma el contenido de los archivos antes de guardarlos. Una regla de atributos con comodín lo asignaba a todos los archivos. Para saber si algo cambió, git status puede pasar los archivos por ese filtro. Así, un git status normal, que algunos editores lanzan solos, puede ejecutar el script .git/ltr.

El autor lo comprobó en un repositorio de prueba inocuo: git status llamó al filtro y un cambio de rama activó además post-checkout.

¿Qué hace el script?

Es un script de shell con debounce: cada llamada al filtro actualiza una marca de tiempo, y un proceso en segundo plano espera a que pasen dos segundos sin novedades para actuar una sola vez. Un directorio creado con mkdir hace de bloqueo. Luego detecta el sistema operativo, descarga código de un subdominio de vercelscript.vercel.app y lo ejecuta, con sh en Linux y macOS o con PowerShell en Windows. La salida y los errores van a /dev/null, así que el usuario puede no notar nada.

Qué hace el código descargado no se puede saber solo con el ZIP. Podría ser un cargador de una segunda fase, robo de datos u otra cosa.

La lección práctica: un repositorio enviado como archivo con su carpeta .git no es lo mismo que un clon desde GitHub o GitLab, y abrirlo en un IDE puede ser arriesgado.

Apps que merecen la pena

SUMO: el puzle de números

Toca las casillas correctas, suma y alcanza el objetivo. Fácil de aprender, difícil de dominar. Gratis, para todas las edades.

Etiquetas:gitmalwarelinkedinjob scamcryptic heavendeveloper security

Más de este día

Ver todas →

Más en: Seguridad

Ver todas →