Link: Multistage landing - JotForm abuse
Detects a disabled JotForm that contains suspicious elements like secured document messaging, cloned forms, or suspicious action words in form items. Also checks for human verification pages and embedded links to credential collection sites.
Sublime rule (View on GitHub)
1name: "Link: Multistage landing - JotForm abuse"
2description: "Detects a disabled JotForm that contains suspicious elements like secured document messaging, cloned forms, or suspicious action words in form items. Also checks for human verification pages and embedded links to credential collection sites."
3type: "rule"
4severity: "high"
5source: |
6 type.inbound
7 and length(filter(body.links, .href_url.domain.root_domain == "jotform.com")) > 0
8 and any(filter(body.links, .href_url.domain.root_domain == "jotform.com"),
9
10 // the form as been disabled
11 strings.icontains(ml.link_analysis(.).final_dom.inner_text,
12 'This form is disabled...'
13 )
14 // it contains suspicious elements within the extracted "appInfo"
15 or any(regex.iextract(ml.link_analysis(.).final_dom.raw,
16 'window\.__appInfo = (?P<appInfo>\{[^\;]+\})\;'
17 ),
18 // the title/description/name contains suspicious keywords
19 any([
20 strings.parse_json(.named_groups["appInfo"])["title"],
21 strings.parse_json(.named_groups["appInfo"])["description"],
22 strings.parse_json(.named_groups["appInfo"])["name"]
23 ],
24 strings.icontains(., 'secured document')
25 or strings.icontains(., 'Adobe PDF')
26 )
27 or any(strings.parse_json(.named_groups["appInfo"])["items"],
28 // find any links that mention common "action" words
29 any([.["description"], .["title"]],
30 regex.icontains(.,
31 '(?:view|click|show|access|download|goto|Validate|Va[il]idar|login|verify|account)'
32 )
33 )
34
35 // inspect the linked page within the "buttonValue" or .title contains a link
36 or (
37 any([.["buttonValue"], .["title"]],
38 strings.icontains(., 'http')
39 and (
40 ml.link_analysis(strings.parse_url(.)).credphish.disposition == "phishing"
41 or ml.link_analysis(strings.parse_url(.)).credphish.contains_captcha == true
42 or strings.istarts_with(ml.link_analysis(strings.parse_url(.
43 )
44 ).final_dom.inner_text,
45 'Verify you are human'
46 )
47 )
48 )
49 )
50 )
51 )
52 )
53attack_types:
54 - "Credential Phishing"
55tactics_and_techniques:
56 - "Evasion"
57 - "Social engineering"
58detection_methods:
59 - "Content analysis"
60 - "HTML analysis"
61 - "Javascript analysis"
62 - "URL analysis"
63id: "5b64326f-e38e-558c-8b5f-d9e7ddee2f69"