/* Tooltip de glosario — CSS-only */
.g {
position: relative;
border-bottom: 1px dotted #0e7c86;
cursor: help;
color: inherit;
text-decoration: none;
}
.g .tip {
visibility: hidden;
opacity: 0;
position: absolute;
bottom: 125%;
left: 50%;
transform: translateX(-50%);
background: #0a1929;
color: #fff;
padding: 8px 12px;
border-radius: 6px;
font-size: 0.85em;
line-height: 1.4;
width: max-content;
max-width: 320px;
z-index: 100;
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
transition: opacity 0.2s ease, visibility 0.2s ease;
pointer-events: none;
}
.g .tip::after {
content: «»;
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
border-width: 6px;
border-style: solid;
border-color: #0a1929 transparent transparent transparent;
}
.g:hover .tip,
.g:focus .tip {
visibility: visible;
opacity: 1;
}
/* Tarjeta ejecutiva */
.tarjeta-ejecutiva {
background: #f8f9fa;
border-left: 4px solid #0e7c86;
padding: 20px 24px;
margin: 24px 0;
font-size: 0.95em;
}
/* Tablas editoriales */
table {
width: 100%;
border-collapse: collapse;
margin: 16px 0;
font-size: 0.93em;
}
thead th {
background: #0e7c86;
color: #fff;
padding: 10px 14px;
text-align: left;
font-weight: 600;
}
tbody td {
padding: 8px 14px;
border-bottom: 1px solid #e5e7eb;
}
tbody tr:nth-child(even) {
background: #f9fafb;
}
code, .mono {
font-family: ‘IBM Plex Mono’, monospace;
font-size: 0.9em;
background: #f1f3f5;
padding: 1px 4px;
border-radius: 3px;
}
/* Separador Nivel 2 */
.lab-separator {
border: none;
border-top: 3px solid #0e7c86;
margin: 48px 0 32px;
}
/* Checklist de recomendaciones */
.recomendaciones li {
list-style: none;
padding-left: 28px;
position: relative;
margin-bottom: 8px;
}
.recomendaciones li::before {
content: «☐»;
position: absolute;
left: 0;
color: #0e7c86;
font-weight: bold;
}
/* Severidad badges */
.sev-critica { color: #c92a2a; font-weight: 700; }
.sev-alta { color: #e67700; font-weight: 700; }
.sev-media { color: #d9a012; font-weight: 700; }
.sev-baja { color: #2b8a3e; font-weight: 700; }
.sev-informativa { color: #1864ab; font-weight: 700; }
/* Footer de IA */
.ai-footer {
margin-top: 40px;
padding-top: 16px;
border-top: 1px solid #e5e7eb;
font-size: 0.85em;
color: #6b7280;
font-style: italic;
}
/* FAQ */
.faq dt {
font-weight: 600;
color: #0a1929;
margin-top: 16px;
}
.faq dd {
margin-left: 0;
margin-bottom: 12px;
color: #374151;
}
/* Línea de tiempo */
.timeline-entry {
display: flex;
gap: 16px;
margin-bottom: 12px;
}
.timeline-date {
min-width: 100px;
font-weight: 600;
color: #0e7c86;
flex-shrink: 0;
}
Paquete Python con 95 millones de descargas mensuales distribuye malware durante tres horas
TeamPCP comprometió LiteLLM en PyPI usando archivos .pth que ejecutan código sin importación explícita — técnica invisible para la mayoría de las herramientas de detección
Categoría: vulnerabilidades · Nivel técnico: Intermedio · Severidad: Crítica
Cómo se comprometió el pipeline de distribución PyPI
El 24 de marzo de 2026, el grupo TeamPCP obtuvo credenciales de publicación del mantenedor de LiteLLM y distribuyó las versiones maliciosas 1.82.7 y 1.82.8 a través del índice oficial PyPI. El payload utilizó archivos .pth, un mecanismo de Python que auto-ejecuta código cada vez que se inicia el intérprete, sin necesidad de importación explícita por parte del desarrollador. Según Zscaler ThreatLabz, los paquetes envenenados estuvieron disponibles aproximadamente tres horas antes de ser puestos en cuarentena — tiempo suficiente para alcanzar decenas de miles de entornos corporativos.
El malware fue diseñado para recolectar tokens de AWS, GCP y Azure, claves SSH y credenciales de cuentas en la nube. TeamPCP comprometió sistemáticamente herramientas de seguridad de código abierto ampliamente confiables incluyendo Trivy de Aqua Security y KICS de Checkmarx antes de atacar bibliotecas de infraestructura de IA. En abril de 2026, las versiones 2.6.2 y 2.6.3 de PyTorch Lightning contenían malware similar que se ejecuta en la importación.
Exposición en entornos de desarrollo de IA en América Latina
Los entornos de desarrollo de IA en Argentina, Brasil, México y Chile combinan desarrollo, infraestructura cloud, acceso a datos y publicación de modelos en el mismo espacio de trabajo. Un paquete comprometido en estos contextos puede exponer simultáneamente pesos de modelos, datos de entrenamiento, tokens cloud de múltiples proveedores, secretos de pipelines CI/CD y claves de API de producción. Investigadores identificaron slopsquatting como técnica donde los LLM generan nombres de paquetes alucinados que no existen en PyPI en aproximadamente 200,000 prompts de Python — creando una superficie de ataque persistente cuando desarrolladores confían en sugerencias de asistentes de código.
Controles inmediatos para equipos de desarrollo
- Fijar cada dependencia a una versión exacta con checksum verificado — evitar especificadores flotantes como
requests>=2.0en favor derequests==2.31.0 - Auditar paquetes que incluyen scripts post-instalación o archivos .pth antes de que lleguen a máquinas de desarrolladores usando herramientas como Socket o Sonatype
- Rotar inmediatamente credenciales cloud de entornos que instalaron LiteLLM durante la ventana de exposición del 24 de marzo y revisar logs de proveedores cloud para patrones de actividad no correspondientes a solicitudes iniciadas por desarrolladores
- Tratar la instalación de paquetes Python en entornos de desarrollo de IA con el mismo rigor que despliegues de producción
Por qué este patrón se va a repetir
ReversingLabs reportó que paquetes de código abierto malicioso aumentaron un 73% en 2026. La campaña de TeamPCP demuestra que la infraestructura de IA es ahora una clase de objetivo específica — los atacantes saben que la adopción de herramientas de IA supera los ciclos de revisión de seguridad y que un archivo .pth malicioso es invisible para la mayoría de los productos de detección en endpoints. La distancia entre el entorno local de un desarrollador y la infraestructura de producción es más corta que nunca.
Este artículo fue producido con asistencia de inteligencia artificial bajo el Estándar Editorial CiberseguridadLatam (CES-1.0), que incluye verificación adversarial automatizada y supervisión editorial.