Skip to content

YARA · Volexity threat-intel

VOLEXITY_Malware_Any_Pupyrat_B

Detects the PUPYRAT malware family, a cross-platform RAT written in Python.

MalwareVolexity threat-intelBSD 2-Clause LicenseCompiles with YARA-X
Author
threatintel@volexity.com
Date
2022-04-07
Modified
2025-03-21
Score / Quality
75 / 80

What this rule detects

Detects the PUPYRAT malware family, a cross-platform RAT written in Python.

It defines 12 patterns (12 text, 0 hex, 0 regex).

Summary generated from the rule's metadata and condition.

Rule source

malware-any-pupyrat-b.yarBSD 2-Clause License
rule VOLEXITY_Malware_Any_Pupyrat_B : FILE MEMORY
{
	meta:
		description = "Detects the PUPYRAT malware family, a cross-platform RAT written in Python."
		author = "threatintel@volexity.com"
		id = "ec8d0448-f47d-5c6e-bcf9-8f40ae83a96f"
		date = "2022-04-07"
		modified = "2025-03-21"
		reference = "https://github.com/n1nj4sec/pupy"
		source_url = "https://github.com/volexity/threat-intel/blob/3a9d0b52459877ee866a9a0ba06e60059b778c77/2022/2022-06-15 DriftingCloud - Zero-Day Sophos Firewall Exploitation and an Insidious Breach/indicators/yara.yar#L121-L158"
		license_url = "https://github.com/volexity/threat-intel/blob/3a9d0b52459877ee866a9a0ba06e60059b778c77/LICENSE.txt"
		hash = "7474a6008b99e45686678f216af7d6357bb70a054c6d9b05e1817c8d80d536b4"
		logic_hash = "f5b5f35ee783ff1163072591c6d48a85894729156935650a0fd166ae22a2ea00"
		score = 75
		quality = 80
		tags = "FILE, MEMORY"
		os = "all"
		os_arch = "all"
		scan_context = "file,memory"
		severity = "critical"
		license = "See license at https://github.com/volexity/threat-intel/blob/main/LICENSE.txt"
		rule_id = 6689
		version = 4

	strings:
		$elf1 = "LD_PRELOAD=%s HOOK_EXIT=%d CLEANUP=%d exec %s 1>/dev/null 2>/dev/null" ascii
		$elf2 = "reflective_inject_dll" fullword ascii
		$elf3 = "ld_preload_inject_dll" fullword ascii
		$pupy1 = "_pupy.error" ascii
		$pupy2 = "pupy://" ascii
		$s1 = "Args not passed" ascii
		$s2 = "Too many args" ascii
		$s3 = "Can't execute" ascii
		$s4 = "mexec:stdin" ascii
		$s5 = "mexec:stdout" ascii
		$s6 = "mexec:stderr" ascii
		$s7 = "LZMA error" ascii

	condition:
		any of ( $elf* ) or all of ( $pupy* ) or all of ( $s* )
}

Strings (12 patterns)

IdentifierTypeValueModifiers
$elf1text"LD_PRELOAD=%s HOOK_EXIT=%d CLEANUP=%d exec %s 1>/dev/null 2>/dev/null"ascii
$elf2text"reflective_inject_dll"fullword ascii
$elf3text"ld_preload_inject_dll"fullword ascii
$pupy1text"_pupy.error"ascii
$pupy2text"pupy://"ascii
$s1text"Args not passed"ascii
$s2text"Too many args"ascii
$s3text"Can't execute"ascii
$s4text"mexec:stdin"ascii
$s5text"mexec:stdout"ascii
$s6text"mexec:stderr"ascii
$s7text"LZMA error"ascii

Condition

any of ( $elf* ) or all of ( $pupy* ) or all of ( $s* )

In plain words (Heuristic)

  • All patterns in ( $pupy* ) must match.
  • All patterns in ( $s* ) must match.
  • At least one pattern in ( $elf* ) must match.

Test this rule in your browser

Drop a file to scan it with this rule using YARA-X compiled to WebAssembly. Nothing is uploaded.

Drop a file here or click to chooseScanned locally with YARA-X. Files up to 200 MB.

Open in editor

References

Sample hashes

Hashes of samples the author lists in the rule's meta (look them up in your threat-intelligence platform).

  • 7474a6008b99e45686678f216af7d6357bb70a054c6d9b05e1817c8d80d536b4

Licence & attribution

Author: threatintel@volexity.com

Source repository: Volexity threat-intel @ 3a9d0b5245

Licence: BSD 2-Clause License (stated in the rule's own meta)

“See license at https://github.com/volexity/threat-intel/blob/main/LICENSE.txt”

Copyright notice: Copyright 2022 by Volexity, Inc.

Original rule

Mirrored via YARA Forge 20260927, which prefixes rule names with the source and adds normalised meta fields.

Rule id: ec8d0448-f47d-5c6e-bcf9-8f40ae83a96f

Metadata

osall
os_archall
scan_contextfile,memory
severitycritical
rule_id6689
version4

Tags:FILEMEMORY