Saltar al contenido

YARA · Signature Base (Florian Roth / Nextron)

SIGNATURE_BASE_MAL_JS_NPM_Supplychain_Compromise_Sep25

Detects a supply chain compromise in NPM packages (TinyColor, CrowdStrike etc.)

MalwareSignature Base (Florian Roth / Nextron)Detection Rule License 1.1Compila con YARA-X
Autor
Florian Roth
Fecha
2025-09-16
Modificada
2025-09-17
Puntuación / Calidad
80 / 85

Qué detecta esta regla

Detects a supply chain compromise in NPM packages (TinyColor, CrowdStrike etc.)

Define 5 patrones (5 de texto, 0 hex, 0 regex).

Resumen generado a partir de los metadatos y la condición de la regla.

Código de la regla

mal-js-npm-supplychain-compromise-sep25.yarDetection Rule License 1.1
rule SIGNATURE_BASE_MAL_JS_NPM_Supplychain_Compromise_Sep25 : FILE
{
	meta:
		description = "Detects a supply chain compromise in NPM packages (TinyColor, CrowdStrike etc.)"
		author = "Florian Roth"
		id = "f64fa37b-8445-554a-8442-bd2d42a6643b"
		date = "2025-09-16"
		modified = "2025-09-17"
		reference = "https://socket.dev/blog/tinycolor-supply-chain-attack-affects-40-packages"
		source_url = "https://github.com/Neo23x0/signature-base/blob/94a1c48d7ab499879287ff611dfe7f9c56376030/yara/mal_npm_supply_chain_sep25.yar#L23-L50"
		license_url = "https://github.com/Neo23x0/signature-base/blob/94a1c48d7ab499879287ff611dfe7f9c56376030/LICENSE"
		logic_hash = "6ddcf152ee8b90496d9d3f7f51dc239d927a3a2095082d13c6cc7e21819097f4"
		score = 80
		quality = 85
		tags = "FILE"

	strings:
		$x1 = "if (plat === \"linux\") return \"https://github.com/trufflesecurity/trufflehog/releases"
		$sa1 = "curl -d \"$CONTENTS\" https://webhook.site/" ascii
		$sa2 = "curl -s -X POST -d \"$CONTENTS\" \"https://webhook.site/"
		$sb1 = " | base64 -w 0 | " ascii
		$sb2 = " | base64 -w0)"

	condition:
		filesize < 20MB and ( 1 of ( $x* ) or ( 1 of ( $sa* ) and 1 of ( $sb* ) ) ) and not uint8( 0 ) == 0x7b
}

Cadenas (5 patrones)

IdentificadorTipoValorModificadores
$x1texto"if (plat === \"linux\") return \"https://github.com/trufflesecurity/trufflehog/releases"
$sa1texto"curl -d \"$CONTENTS\" https://webhook.site/"ascii
$sa2texto"curl -s -X POST -d \"$CONTENTS\" \"https://webhook.site/"
$sb1texto" | base64 -w 0 | "ascii
$sb2texto" | base64 -w0)"

Condición

filesize < 20MB and ( 1 of ( $x* ) or ( 1 of ( $sa* ) and 1 of ( $sb* ) ) ) and not uint8( 0 ) == 0x7b

En palabras sencillas (Heurística)

  • El archivo debe ocupar menos de 20MB (un límite barato que descarta archivos grandes).
  • Deben coincidir al menos 1 patrones de ( $x* ).
  • Deben coincidir al menos 1 patrones de ( $sa* ).
  • Deben coincidir al menos 1 patrones de ( $sb* ).

Prueba esta regla en tu navegador

Arrastra un archivo para escanearlo con esta regla usando YARA-X compilado a WebAssembly. No se sube nada.

Arrastra un archivo aquí o haz clic para elegirSe escanea en local con YARA-X. Archivos de hasta 200 MB.

Abrir en el editor

Referencias

Licencia y atribución

Autor: Florian Roth

Repositorio de origen: Signature Base (Florian Roth / Nextron) @ 94a1c48d7a

Licencia: Detection Rule License 1.1 (licencia del repositorio)

Regla original

Obtenida a través de YARA Forge 20260927, que añade a los nombres el prefijo de la fuente y campos meta normalizados.

Id de la regla: f64fa37b-8445-554a-8442-bd2d42a6643b

Etiquetas:FILE