Attachment: Re-stamped invoice PDF with IRS references from external sender
Detects inbound messages from external senders that carry a PDF attachment generated with the MuhammaraJS or Hummus-Recipe PDF libraries, identified via embedded EXIF/producer metadata. These PDFs masquerade as outstanding invoice or payment follow-up notices and contain an embedded link pointing to irs.gov/FormW9, attempting to lend legitimacy to the fraudulent invoice by referencing an official IRS tax form. The pattern spans numerous unrelated sender domains and spoofed invoice subject lines, consistent with a shared PDF-generation toolkit used for business email compromise style lures.
Sublime rule (View on GitHub)
1name: "Attachment: Re-stamped invoice PDF with IRS references from external sender"
2description: "Detects inbound messages from external senders that carry a PDF attachment generated with the MuhammaraJS or Hummus-Recipe PDF libraries, identified via embedded EXIF/producer metadata. These PDFs masquerade as outstanding invoice or payment follow-up notices and contain an embedded link pointing to irs.gov/FormW9, attempting to lend legitimacy to the fraudulent invoice by referencing an official IRS tax form. The pattern spans numerous unrelated sender domains and spoofed invoice subject lines, consistent with a shared PDF-generation toolkit used for business email compromise style lures."
3type: "rule"
4severity: "high"
5source: |
6 type.inbound
7 and any(attachments,
8 .file_type == "pdf"
9 and (
10 strings.icontains(beta.parse_exif(.).producer, 'MuhammaraJS')
11 or strings.icontains(beta.parse_exif(.).creator, 'Hummus-Recipe')
12 )
13 //
14 // This rule makes use of a beta feature and is subject to change without notice
15 // using the beta feature in custom rules is not suggested until it has been formally released
16 //
17 and any(beta.parse_exif(.).fields, .key == "Source-Producer")
18 and beta.parse_exif(.).page_count <= 4
19 //
20 // This rule makes use of a beta feature and is subject to change without notice
21 // using the beta feature in custom rules is not suggested until it has been formally released
22 //
23 and regex.icontains(beta.ocr(.).text,
24 'irs\.gov/form',
25 'request for taxpayer',
26 'identification number and certification',
27 'form\s*w-?9\b'
28 )
29 )
30attack_types:
31 - "BEC/Fraud"
32tactics_and_techniques:
33 - "PDF"
34 - "Social engineering"
35 - "Impersonation: Brand"
36detection_methods:
37 - "Exif analysis"
38 - "File analysis"
39 - "Optical Character Recognition"
40id: "27d941d3-d589-5c74-816f-07d7b14315ac"