TL;DR
We received a Business Email Compromise (BEC) phishing email impersonating a Stewart Title escrow officer, sent from a compromised law firm email account. The email claimed to contain Borrower Closing Disclosure documents and Payoff Statements. Our analysis revealed a sophisticated five-stage attack chain:
- Stage 1: A fake Stewart Title document portal hosted on
lovable[.]app— a legitimate AI-powered web app builder abused as phishing infrastructure - Stage 2: A fake CAPTCHA gate on
framer.miofreahou[.]icuwith the same obfuscation techniques we documented in our previous BEC analysis - Stage 3: A triple-encrypted JavaScript payload with anti-analysis protections (WebDriver/Burp/PhantomJS detection, DevTools timing traps, right-click blocking), OS fingerprinting that blocks Linux users, and a remote kill switch on
tiktok.frooshouwa[.]best - Stage 4: A server-side AiTM credential router that extracts the victim’s email from the URL, POSTs it to the phishing server, and receives an encrypted redirect to the actual credential harvester at
sentry.miofreahou[.]icu - Stage 5: A pixel-perfect Google “Sign in to Gmail” AiTM proxy with every authentication step pre-loaded — password, SMS, authenticator, Google prompt, backup codes, CAPTCHA, and password change — proxying real Google servers in real-time to capture credentials and session tokens
1. The Phishing Email
The attack begins with an email sent from a compromised law firm account. Here are the sanitized headers:
| |
What Makes This Email Convincing
The email impersonates Veronica Feinstein, an Escrow Officer at Stewart Title — one of the largest title insurance companies in the United States. The signature includes:
- Full name, title (“Escrow Officer”), and company branding
- Stewart Title office address: 7251 W. Lake Mead Blvd. Ste. 350, Las Vegas, Nevada 89128
- Direct phone numbers: Office (702) 873-0320 Ext. 4345, Mobile (702) 462-3405
- Professional license numbers: Escrow Officer License #3141856, Stewart Title License #807985
- A Stewart Title logo and corporate imagery
- A link to the real Stewart Title YouTube channel (via Proofpoint URL Defense)
- A CertifID wire fraud warning — ironically, a legitimate anti-fraud tool used in real estate closings
- A vacation notice: “I WILL BE ON VACATION MARCH 5-13TH” — adding a sense of urgency to review documents before the escrow officer is unavailable
The email body reads:
| |
This is a textbook real estate wire fraud setup. Closing Disclosures and Payoff Statements are routine documents exchanged between escrow officers, lenders, and title companies during property transactions. The language about “approved loan structure and compliance requirements” sounds authentic to anyone involved in a closing.
Email Authentication Analysis
The email passes all standard authentication checks because it was sent from a genuinely compromised Microsoft 365 account:
| |
The X-MS-Exchange headers confirm this is a legitimate Microsoft 365 tenant:
| |
Sender Domain: goldmangruderwoods.com
| |
Goldman Gruder Woods is a real law firm registered since 2001. Their Microsoft 365 account ([email protected]) was compromised and used to send this phishing email. The attacker leveraged the firm’s legitimate domain reputation and DKIM/SPF/DMARC configuration to bypass email security filters.
2. Stage 1: Fake Stewart Title Portal (lovable.app)
Clicking the link takes the victim to https://stewart-title-closing-document-portal.lovable[.]app/ — a convincing Stewart Title document portal.

The phishing page displays the Stewart Title logo, a progress bar suggesting document loading, a lock icon, and a red “Open Document” button. The footer reads “By continuing, you agree to our terms of service and privacy policy.”
Why Lovable?
Lovable (lovable.app) is a legitimate AI-powered web application builder based in Stockholm, Sweden. Attackers abuse it because:
- Domain reputation:
lovable.appis a trusted domain — email filters and web proxies rarely block it - AI-assisted development: The platform’s AI can generate convincing professional-looking pages with minimal effort
- Free deployment: Apps are deployed instantly on
*.lovable.appsubdomains - SSL by default: Google Trust Services provides wildcard HTTPS certificates
- Custom subdomain names: The attacker chose
stewart-title-closing-document-portal— a convincing, professional-sounding subdomain
Page Structure
The page is a React single-page application with two scripts:
| |
The “Open Document” button is a <form> submit that triggers a client-side redirect. When clicked, it redirects to:
| |
The subdomain framer is deliberately chosen to suggest the page is hosted on Framer (another legitimate website builder), adding a layer of domain name deception.
Infrastructure
| |
3. Stage 2: Fake CAPTCHA Gate (miofreahou.icu)
The second stage presents a “Human Check” CAPTCHA page:

The CAPTCHA page shows a “Human Check” header with a lock icon, a canvas-rendered challenge code with wave distortion and noise dots, a text input field, and a “Verify Identity” button. A “Live challenge” badge and “Status: active” indicator add false legitimacy.
Obfuscated Form Builder
The page injects a hidden form using the exact same obfuscation pattern we documented in our previous analysis — strong evidence this is the same threat actor or phishing kit:
| |
Obfuscated Submit Call
After CAPTCHA verification, the form auto-submits using a different word acrostic than the previous campaign:
| |
The previous campaign used summary user box media index task — different words, same technique.
Server-Side Session: Laravel
The server sets Laravel session cookies, revealing the backend technology:
| |
This is a PHP/Laravel application running behind Cloudflare, not a static page.
4. Stage 3: Triple-Encrypted Anti-Analysis Payload
After the CAPTCHA POST, the server delivers a page containing a heavily encrypted JavaScript blob. The encryption uses a seeded PRNG + Caesar cipher + XOR scheme:
| |
The decryption uses XOR between two values: 0x63,0x66,0x61,0x66 and 0x02,0x12,0x0e,0x04 to derive “atob” — the base64 decode function name. Then it applies a seeded linear congruential generator (LCG) for XOR key generation, followed by a modular Caesar shift.
Anti-Analysis Protections
The decrypted payload contains extensive anti-analysis measures:
Bot Detection:
| |
DevTools Keyboard Shortcuts Blocked:
| Shortcut | Purpose |
|---|---|
| F12 | Open DevTools |
| Ctrl+U | View Source |
| Ctrl+Shift+I | Inspector |
| Ctrl+Shift+C | Element Picker |
| Ctrl+Shift+J | Console |
| Ctrl+Shift+K | Network |
| Ctrl+H | History |
| Cmd+Opt+I | Inspector (macOS) |
| Cmd+Opt+C | Console (macOS) |
| Cmd+U | View Source (macOS) |
Right-Click Disabled:
| |
Debugger Timing Trap:
| |
OS Fingerprinting
The payload blocks Linux users entirely (except Android):
| |
This targets Windows and macOS users — the primary targets in corporate real estate transactions — while evading Linux-based security sandboxes.
Remote Kill Switch
Before loading the credential harvester, the code checks a remote kill switch:
| |
At the start of our analysis, the kill switch returned 1 — the campaign appeared deactivated. However, the server-side POST endpoint still returned {"status":"success"}. During subsequent Burp Suite testing, the kill switch began returning 0 — confirming the campaign was reactivated while we were analyzing it. The threat actor is actively monitoring and toggling the campaign in real-time.
5. Stage 4: Server-Side AiTM Credential Router
After the kill switch check passes, the page reloads with a new encrypted payload. After decrypting two additional layers (another seeded PRNG encryption and an XOR cipher with key p8LeHrG21M), the final JavaScript reveals a credential routing system:
Email Extraction from URL
The code extracts the victim’s email address from the phishing URL using multiple delimiter formats:
| |
Server-Side AiTM Resolution
The extracted email is POSTed to a server endpoint that returns an encrypted redirect URL:
| |
This server-side routing architecture means:
- No hardcoded phishing URLs in the client-side code — making static analysis ineffective
- The server can dynamically route different victims to different AiTM proxies
- The server can return different responses based on the victim’s email domain (targeting specific organizations)
- The redirect URL is encrypted in transit between server and client
AiTM Proxy Endpoint
The embedded configuration reveals the AiTM proxy URL template:
| |
The {s} placeholder is replaced with a session identifier at runtime. The sentry subdomain (suggesting a monitoring service) is another layer of domain name deception.
Fallback Error Page
If the routing fails, the code displays a fake cPanel “SORRY!” error page containing a Russian hosting provider artifact:
| |
This suggests the phishing kit developer or hosting infrastructure has ties to Russian hosting providers.
6. Stage 5: AiTM Google Sign-In Credential Harvester
After the credential router resolves the AiTM proxy URL, the victim is redirected to a pixel-perfect Google “Sign in to continue to Gmail” page:

The AiTM credential harvester displays a Google Sign-In page identical to the real one — complete with the Google logo, “Email or phone” input, “Forgot email?” link, Guest mode notice, “Create account” and “Next” buttons, and the Help/Privacy/Terms footer. The URL bar shows framer.miofreahou[.]icu, not accounts.google.com.
Full Authentication Flow Pre-Loaded
The page pre-loads every possible Google authentication step as hidden panels, ready to proxy each stage in real-time:
| Step | UI Elements |
|---|---|
| Email Entry | “Sign in to continue to Gmail” + email input |
| Password Entry | “Welcome” + password input + show password toggle |
| 2FA: Google Prompt | “Check your phone” + tap notification prompt |
| 2FA: SMS Code | 6-digit code input + masked phone number |
| 2FA: Phone Call | Voice verification code input |
| 2FA: Authenticator | Google Authenticator TOTP code input |
| 2FA: Backup Codes | 8-digit backup code input |
| 2FA: Security Code | Android device security code instructions |
| 2FA: Recovery Email | Recovery email verification |
| CAPTCHA Challenge | Google CAPTCHA image + text input |
| Password Change | “Create a strong password” form (forced reset) |
| Error States | “Sign-in stopped” / “Couldn’t sign you in” |
This means the AiTM proxy can intercept every authentication method Google supports — including TOTP codes, SMS codes, phone calls, and Google prompt notifications. Only FIDO2/WebAuthn hardware security keys are immune because the domain mismatch (miofreahou.icu vs google.com) prevents the key from responding.
Decoy Landing Page
When accessing sentry.miofreahou[.]icu without a valid session, the server returns a fake e-commerce site titled “ElectroMax | Premium Electronics & Machinery” — a benign decoy designed to fool security researchers and automated scanners investigating the domain.
Network Behavior
The Google Sign-In page is rendered entirely client-side after JavaScript decryption. No external Google API calls are made until the victim submits credentials — at which point the AiTM proxy relays requests to real Google servers in real-time, capturing credentials and session tokens in transit.
| |
No Google authentication endpoints are contacted until the victim clicks “Next” — the initial page is a self-contained HTML/CSS/JS clone decrypted from the encrypted payload.
7. Attack Flow Summary
| |
8. HTTP Traffic Analysis
Below is the captured HTTP traffic for each stage — equivalent to Burp Suite proxy intercepts.
8.1 Stage 1: GET lovable.app Portal
| |
| |
TLS: TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256. Certificate: CN=lovable.app (wildcard *.lovable.app), issuer Google Trust Services WE1. Edge: Cloudflare BOM (Mumbai). The React SPA renders the fake Stewart Title portal with the “Open Document” button that submits to Stage 2.
8.2 Stage 2: GET CAPTCHA Gate
| |
| |
Key observations: Laravel session cookies (XSRF-TOKEN + laravel_session) are base64-encoded encrypted JSON blobs with iv, value, mac, and tag fields — standard Laravel Encrypter format. The cache-control: no-cache, private prevents proxy caching. Edge: Cloudflare NRT (Tokyo).
8.3 Stage 2: POST CAPTCHA Submit
| |
| |
The CAPTCHA form POSTs a single hidden field zone= (empty). The server rotates both session cookies and returns a redirect-via-JavaScript (not a 302). This forces the browser to make a fresh GET with the new session cookies, which delivers the encrypted payload.
8.4 Stage 3: GET Encrypted Payload (post-CAPTCHA)
| |
| |
The same URL now returns different content based on the session state (CAPTCHA completed). The response is an HTML page with a <script> tag containing a 6KB encrypted blob — the triple-encrypted anti-analysis payload documented in Section 4.
8.5 Kill Switch Check
| |
| |
Response body: 1 (single character). When 1, the campaign is deactivated — the client-side code redirects to selz.com. When 0, the attack proceeds. The access-control-allow-origin: * header enables cross-origin fetch from the phishing domain. Edge: Cloudflare KIX (Osaka).
8.6 Sentry AiTM Endpoint (no valid session)
| |
| |
Without a valid session path, the server returns a 404 with a decoy page — a fake e-commerce site called “ElectroMax”. This is designed to fool security researchers and automated scanners investigating the domain. Note: the same Laravel session cookies are still issued, confirming sentry.miofreahou[.]icu runs the same application as framer.miofreahou[.]icu.
8.7 Credential Submission: AiTM Routing (Burp Intercept)
The following traffic was captured through Burp Suite proxy during a controlled credential submission test.
Request — Victim email POSTed to credential router:
| |
Response — XOR-encrypted redirect URL:
| |
The server returns a JSON object with data (base64-encoded XOR-encrypted redirect URL) and key (the XOR decryption key). Decrypting with the client-side XOR routine reveals:
| |
The server dynamically generates a unique session path (/1wfflc7pbhz37a) for each victim, with the id parameter encoding the AiTM session state. This URL delivers the Google Sign-In AiTM proxy.
8.8 Kill Switch State Change (Burp Intercept)
A second kill switch check via Burp revealed the campaign was reactivated during our analysis:
| |
| |
The kill switch now returns 0 (campaign active) — it was returning 1 (deactivated) earlier in our analysis. This confirms the threat actor is actively monitoring and toggling the campaign in real-time.
8.9 AiTM Session Delivery (Burp Intercept)
Following the decrypted redirect URL through Burp:
| |
| |
The response contains obfuscated JavaScript that:
- Creates a
FormDatafrom a hidden form - POSTs it to the same URL (session relay)
- Base64-encodes the response
- Constructs
atobvia word acrostic:ari[0]+train[0]+organ[0]+blend[0]→ “atob” - Decodes and writes the encrypted payload to the page
This triggers the full Stage 3 → Stage 4 → Stage 5 decryption chain, ultimately rendering the Google Sign-In AiTM proxy.
Traffic Summary
| # | Method | Host | Path | Status | Purpose |
|---|---|---|---|---|---|
| 1 | GET | stewart-title-closing-document-portal.lovable[.]app | / | 200 | Fake Stewart Title portal |
| 2 | GET | framer.miofreahou[.]icu | /lLGIpEy1h5wc!cl/ | 200 | CAPTCHA gate (sets Laravel session) |
| 3 | POST | framer.miofreahou[.]icu | /lLGIpEy1h5wc!cl/ | 200 | CAPTCHA submit (zone=) |
| 4 | GET | framer.miofreahou[.]icu | /lLGIpEy1h5wc!cl/ | 200 | Encrypted payload (6,061 bytes) |
| 5 | GET | tiktok.frooshouwa[.]best | /quantum~jxkra | 200 | Kill switch check (1 → 0) |
| 6 | POST | framer.miofreahou[.]icu | /rqS6f5Ibu...C3nbfw | 200 | Credential router (email → encrypted URL) |
| 7 | GET | framer.miofreahou[.]icu | /1wfflc7pbhz37a?id=... | 200 | AiTM session page (encrypted loader) |
| 8 | GET | framer.miofreahou[.]icu | /{session}/ | 200 | Google Sign-In AiTM proxy |
9. Comparison with Previous Campaign
This attack shares significant code and infrastructure patterns with the BEC phishing chain we analyzed yesterday, suggesting the same threat actor or phishing kit:
| Feature | Previous Campaign (Feb 24) | This Campaign (Feb 25) |
|---|---|---|
| Email lure | Fake payment advice | Fake closing documents |
| Impersonation | Accounts Payable | Stewart Title escrow officer |
| Stage 1 platform | systeme.io (marketing platform) | lovable.app (AI app builder) |
| CAPTCHA obfuscation | Identical pattern | Identical pattern |
| Submit acrostic | summary user box media index task | stormy umbrellas block misty inlets tonight |
| Form builder | Same "performance" → “form” trick | Same "performance" → “form” trick |
| AiTM approach | Socket.IO real-time relay | Server-side URL routing |
| Anti-analysis | Minimal | Extensive (debugger traps, OS filtering, kill switch) |
| Server stack | Unknown | Laravel (PHP) on Cloudflare |
| Kill switch | None observed | tiktok.frooshouwa[.]best |
| Encryption layers | None (plain HTML) | Triple (seeded PRNG + Caesar + XOR) |
The identical CAPTCHA obfuscation pattern — the same string manipulation techniques for “form”, “input”, “hidden”, “POST”, and “submit” — is a strong indicator linking these campaigns.
10. Indicators of Compromise
Network IOCs
| Indicator | Type | Role |
|---|---|---|
stewart-title-closing-document-portal.lovable[.]app | Hostname | Stage 1: Fake Stewart Title portal |
miofreahou[.]icu | Domain | Primary phishing infrastructure |
framer.miofreahou[.]icu | Hostname | Stage 2-4: CAPTCHA + encrypted payload |
sentry.miofreahou[.]icu | Hostname | AiTM credential proxy |
frooshouwa[.]best | Domain | Kill switch infrastructure |
tiktok.frooshouwa[.]best | Hostname | Kill switch endpoint |
goldmangruderwoods[.]com | Domain | Compromised sender (law firm) |
vfeinstein@goldmangruderwoods[.]com | Compromised sender account | |
104.21.16.201 | IPv4 | miofreahou.icu (Cloudflare) |
172.67.215.230 | IPv4 | miofreahou.icu (Cloudflare) |
104.21.53.169 | IPv4 | frooshouwa.best (Cloudflare) |
172.67.215.206 | IPv4 | frooshouwa.best (Cloudflare) |
185.41.148.1 | IPv4 | lovable.app infrastructure |
185.41.148.2 | IPv4 | lovable.app infrastructure |
URLs
| URL | Stage |
|---|---|
https://stewart-title-closing-document-portal.lovable[.]app/ | Stage 1: Fake Stewart Title portal |
https://framer.miofreahou[.]icu/lLGIpEy1h5wc!cl/ | Stage 2: CAPTCHA gate |
https://tiktok.frooshouwa[.]best/quantum~jxkra | Kill switch check |
https://sentry.miofreahou[.]icu/{s}/ | AiTM credential proxy |
SSL Certificates
| Domain | Issuer | Valid From | Valid To |
|---|---|---|---|
miofreahou.icu (+ wildcard) | Google Trust Services WE1 | 2026-02-13 | 2026-05-14 |
frooshouwa.best (+ wildcard) | Google Trust Services WE1 | 2026-02-11 | 2026-05-12 |
lovable.app (+ wildcard) | Google Trust Services WE1 | 2026-02-16 | 2026-05-17 |
Phishing Kit Fingerprints
| |
MITRE ATT&CK
| ID | Technique |
|---|---|
| T1566.002 | Phishing: Spearphishing Link |
| T1586.002 | Compromise Accounts: Email Accounts (BEC via compromised law firm) |
| T1608.005 | Stage Capabilities: Link Target (Lovable platform abuse) |
| T1557 | Adversary-in-the-Middle (server-side credential routing) |
| T1027.013 | Obfuscated Files: Encrypted/Encoded File (triple-encrypted JS) |
| T1497.001 | Virtualization/Sandbox Evasion: System Checks (WebDriver, debugger timing) |
| T1082 | System Information Discovery (OS fingerprinting to block Linux) |
| T1036 | Masquerading (fake Stewart Title portal, fake CAPTCHA) |
| T1071.001 | Application Layer Protocol: Web (kill switch via HTTP GET) |
AlienVault OTX Pulse
IOCs from this analysis have been published to AlienVault OTX:
BEC Phishing: Fake Stewart Title Closing Docs to Multi-Layer Encrypted AiTM Router
11. Detection and Recommendations
For Security Teams
- Block
miofreahou[.]icuandfrooshouwa[.]bestat the DNS/proxy level - Alert on emails containing links to
*.lovable.appsubdomains, especially in real estate / financial contexts - Monitor for Microsoft 365 accounts at law firms sending unusual closing document notifications
- Flag emails referencing Stewart Title, closing disclosures, or payoff statements that link to non-Stewart Title domains
- Report the Lovable page at
stewart-title-closing-document-portal.lovable.appto the Lovable abuse team - Report the compromised account to Goldman Gruder Woods and their IT provider
For Real Estate Professionals
- Verify closing document links by calling your escrow officer directly at a known phone number — never use contact info from the email itself
- Check the URL bar — legitimate Stewart Title portals use
stewart.comorstewartconnect.comdomains, notlovable.app - Be suspicious of closing documents sent as web links rather than encrypted email attachments or via secure portals like CertifID, Qualia, or SoftPro
- Wire fraud verification: Always verify wiring instructions via a separate communication channel. The irony of this email including a CertifID wire fraud warning while being a phishing email itself should not be lost
For End Users
- Use hardware security keys (FIDO2/WebAuthn) — they are the only 2FA method that AiTM phishing cannot intercept
- Report suspicious emails to your IT security team, even from known contacts
- Check the sender domain —
goldmangruderwoods.comis a law firm, not Stewart Title
Analysis performed on 2026-02-25. The phishing campaign’s kill switch toggled from deactivated to active during our analysis — the threat actor is actively monitoring the infrastructure. HTTP traffic captured via Burp Suite proxy. Email headers sanitized to protect the compromised individual’s identity. IOCs published to AlienVault OTX.
