---
id: "MAL-2026-18083"
kind: "package"
aliases: ["MAL-2026-18083"]
title: "Malicious code in tailwind-keyframes (npm)"
severity: "critical"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: [{"name": "tailwind-keyframes", "fixed": [], "affected": "= 2.0.6", "ecosystem": "npm"}]
ecosystems: ["npm"]
tags: ["malicious", "package"]
not_affected_if: []
published_at: "2026-10-19T00:00:00+00:00"
first_seen_at: "2026-10-26T20:51:47+00:00"
updated_at: "2026-10-26T21:04:10+00:00"
sources: [{"source": "osv-malicious", "url": "https://osv.dev/vulnerability/MAL-2026-18083", "first_seen_at": "2026-10-26T20:51:47+00:00"}]
---

# Malicious code in tailwind-keyframes (npm)

## Affected

- npm:tailwind-keyframes affected = 2.0.6 fixed ?

## Timeline

- 2026-10-26T20:51:47+00:00 osv-malicious https://osv.dev/vulnerability/MAL-2026-18083

## From the sources

tailwind-keyframes (2.0.6) is a Tailwind CSS plugin from the fake job interview campaign behind MAL-2026-17665 and MAL-2026-17666: the same Animate.css integration template, README and description, published by adriannamrr on 2026-09-28. src/motion.js:5 requires the private scoped package @aaron205whitmore/postcss-animate-utils, which is not readable on the public registry and resolves only with the npm token committed in the lure repository's web/.npmrc, so the code it delivers runs when tailwind.config.js loads the plugin and the dev server starts. The published tarball contains no install scripts and no network code; the payload lives in the private dependency, which was not retrieved. Twenty-six such packages under seventeen accounts were published between 2026-07-28 and 2026-10-09.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
