Skip to content
Sedat Özdemir
Writing

mfa-fatigue

Patching the Human Factor: Vulnerability Scanning in Social Engineering

When a user clicks a malicious link, millions of dollars in security investment can turn into expensive paperweights. Let’s talk about how social engineering exploits 'wetware' and how we can defend against it.

Sedat Özdemir
· 3 dk read

The moment someone clicks that innocent-looking hxxps[:]//login.testCompany-support[.]com link under a Subject: Action Required: Your password expires in 2 hours header, all those multi-million dollar firewall and EDR investments basically turn into expensive office decor. The real exploit isn't the payload hitting the memory; it’s that finger pressing the left mouse button. One of the biggest misconceptions I see in the field is thinking social engineering is just 'tricking people.' In reality, it’s a meticulously planned 'wetware' attack that exploits logical bugs in human psychology.

OSINT: Taking a Digital X-Ray of the Target

Before we even think about entering a target in Red Team operations, our first move is OSINT (Open Source Intelligence). And no, it’s not just 'stalking'—it's way more than that. An attacker can easily map out a company's tech stack, employee hierarchy, and even their preferred VPN solution just by pivoting through LinkedIn or GitHub.

For example, a harmless-looking comment in a code snippet shared by a dev on GitHub (// TODO: internal API endpoint changed to api-dev.testCompany.local) is pure gold for us. It gives away the internal network structure. Or an 'out of office' reply from a key employee tells the attacker exactly when the perimeter is at its weakest. In social engineering, technical prep is 80% of the attack.

Beyond Phishing: Smishing, Vishing, and MFA Fatigue

Classic phishing is getting a bit 'old school.' We’re seeing much more sophisticated methods now. MFA Fatigue (Multi-Factor Authentication Fatigue) is a recent favorite. The scenario is simple but brutally effective: The attacker grabs the victim's password (via credential stuffing or phishing). Then, at 03:00 AM, they flood the victim’s phone with dozens of Push notifications.

# Pseudo-code for a basic push bombing script
import requests
import time

def flood_mfa_push(user_id):
    while True:
        # Triggering a push notification via the internal identity provider's API
        response = requests.post("hxxps[:]//auth.example.com/api/v1/trigger-push", json={"user": user_id})
        if response.status_code == 200:
            print(f"[+] Push sent to {user_id}. Waiting for the 'fatigue' to kick in...")
        time.sleep(1) # Send every second to maximize annoyance

The victim, woken up by a vibrating phone in the middle of the night, hits 'Approve' just to make the 'error' go away. Suddenly, the door is wide open. This isn't a software bug; it’s a 'User Experience' (UX) vulnerability.

Punycode and the Invisible Threat

Just because a domain looks legit doesn't mean it is. With Punycode attacks, it's child's play to deceive users by exploiting how browsers render character sets.

For example:

  • Real: testCompany.com
  • Fake: testCοmpany.com (That 'ο' is actually the Greek 'Omicron' character - xn--testcmpany-58a.com)

When a user glances at the address bar, everything looks fine. The SSL certificate is green (thanks to Let's Encrypt), the lock icon is there, but the destination is malicious. To defend against this, we need to focus on 'Human Hardening'—training our team to not just look, but to see the anomalies. Stay safe out there.

Related posts