Un malware oculto en el hook post-checkout de git ataca a desarrolladores
El desarrollador Frank Wiles cuenta que un falso cliente le envió un repositorio cuyo hook post-checkout de git descargaba malware al cambiar de rama. Quienes buscan empleo sufren el mismo truco.
4 min de lectura

El desarrollador Frank Wiles escribió el 2 de octubre de 2026 que unos atacantes intentaron hacerse con sus cuentas mediante un repositorio de git con trampa. La trampa era un hook post-checkout, un script que git ejecuta cada vez que cambias de rama. Es el caso más reciente de una campaña que afecta a quienes buscan empleo desde al menos mayo. Para los desarrolladores, la lección es que el simple hecho de cambiar a una rama en el repositorio de otra persona puede ejecutar su código.
Lo que le pasó a Frank Wiles
El atacante se hizo pasar por el dueño de una empresa de desarrollo, escribió Wiles en su blog. Le pidió que revisara un NDA, un acuerdo de confidencialidad, y compartió un repositorio a través de Dropbox. Después le pidió que cambiara a una "rama del NDA".
Ese cambio de rama era el detonante. En la carpeta .git/hooks/ del repositorio había un hook post-checkout. Cuando Wiles cambió de rama, el hook descargó un programa creado para su sistema operativo desde un servidor alojado en Vercel. Hizo ejecutable el archivo, lo ejecutó y después se borró a sí mismo.
Wiles cree que el objetivo era "acceder a mi cuenta de Github y/o a otros accesos relacionados con clientes de REVSYS". Señala que el hook post-checkout se usa poco, lo que hace fácil pasarlo por alto. Su consejo para otros desarrolladores es estar "muy alerta y vigilar tus credenciales como un halcón".
Cómo los hooks de git se convierten en un arma
Los hooks de git son pequeños scripts que git ejecuta automáticamente en momentos concretos, como antes de un commit o después de un checkout. Son una función normal, usada para tareas como ejecutar un linter. Un git clone normal desde un servidor no copia los hooks, y por eso estos atacantes usan otras vías.
Los informes muestran dos vías:
- Enviar la carpeta entera. Wiles recibió su repositorio a través de Dropbox. En un caso que Andrii analizó en una entrada de blog de mayo, el objetivo recibió un "código de demostración" en Google Drive. Una carpeta compartida o un archivo comprimido puede incluir el directorio oculto
.git, con hooks incluidos. - Pedir a la víctima que active los hooks. OpenSourceMalware describe repositorios que guardan los hooks en una carpeta
.githooks. Las víctimas parecen haberlos activado congit config core.hooksPath .githookssin leerlos.
De cualquier forma, el hook se ejecuta durante el trabajo normal. En el caso que analizó Andrii, se activó con git checkout dev, el comando para ver el código principal.
Lo que roba el malware
Las cargas útiles varían, pero apuntan a lo mismo. El análisis de Andrii encontró un programa que buscaba claves SSH como id_ed25519, archivos .env, monederos de criptomonedas y certificados. Examinaba las carpetas Desktop, Documents y Downloads y subía los archivos de menos de 10 MB. También enviaba el contenido del portapapeles cada segundo, y permitía al atacante ejecutar comandos en la máquina.
Un artículo de julio en el blog Citizen Dot describe una trampa parecida detrás de una oferta de empleo falsa. Un "reclutador" de LinkedIn ofrecía un contrato en remoto pagado con "10.000-15.000 dólares al mes". El proyecto para hacer en casa llegó como un zip en Google Drive, con un hook de git que descargaba un programa para robar monederos de criptomonedas.
Quién está detrás
OpenSourceMalware atribuye la campaña al Lazarus Group, el grupo de hackers norcoreano. Relaciona el truco de los hooks de git con la campaña "Contagious Interview" de entrevistas de trabajo falsas, que se dirige sobre todo a personas del mundo cripto y web3. En los casos que estudió, el malware se ejecutaba "la primera vez que el candidato intenta corregir el error y hacer commit". Calificó los hooks post-checkout como una variante "aún más retorcida", porque se activan con un simple cambio de rama.
El caso que describe Wiles usó un falso cliente y un NDA, no una oferta de empleo. El método, un hook oculto que descarga su carga útil desde un servidor, es el mismo.
Qué significa esto para los desarrolladores
Nunca abras en tu propia máquina un repositorio que hayas recibido como carpeta o archivo comprimido. En su lugar, clónalo de cero desde un servicio de alojamiento de git, o ábrelo dentro de una máquina virtual o un contenedor desechables. Un clon nuevo deja atrás los hooks del remitente.
Antes de ejecutar cualquier comando de git en código compartido, mira dentro de .git/hooks/ si hay archivos sin la terminación .sample. Revisa .git/config en busca de un ajuste hooksPath, y busca una carpeta .githooks. El consejo del autor de Citizen Dot es inspeccionar carpetas ocultas como .git y .vscode antes de tocar código que no sea de confianza.
También puedes desactivar los hooks para un solo comando. Ejecutar git -c core.hooksPath=/dev/null checkout <branch> dirige git a una ubicación vacía, así que no se ejecuta ningún hook.
Trata cualquier petición de cambiar tu configuración de git como una señal de alarma. Un cliente o empleador real no tiene ningún motivo para pedirte que actives sus hooks. Si crees que un hook ya se ejecutó, da por hecho que tus claves SSH, tokens y secretos de .env están expuestos. Renuévalos desde una máquina limpia, y revisa tu cuenta de GitHub en busca de claves o sesiones nuevas.
Fuentes
- I got targeted: Trying to get your credentials via a git post-checkout hook - Frank Wiles
- Be careful with your Git: Investigating malware spreading through Git repositories - andrii.ro
- Lazarus Group Uses Git Hooks To Hide Malware - OpenSourceMalware
- I Inspected My Take-Home Interview Project. It Was a Trap - Citizen Dot
Artículos relacionados

El SHA-256 por defecto de Git 3.0 es un error costoso, dice Chacon
Scott Chacon dice que el SHA-256 por defecto de Git 3.0 arregla un problema que ningún repositorio ha sufrido y rompe los hashes de 40 caracteres en todas partes. Git no fija fecha.

El trusted publishing de npm ya puede mover dist-tags mediante OIDC
El trusted publishing de npm ya puede añadir, mover y eliminar dist-tags como latest con tokens OIDC de corta duración. Está desactivado por defecto y requiere npm 11.21.0.

Git 2.56.0 llega con merge-base más rápido y repacks más pequeños
Git 2.56.0 reduce un recorrido de merge-base en el kernel de Linux de 167.441 a 3.887 pasos y encoge un 71 % el pack de un repositorio de prueba. Salió el 28 de septiembre.