The QR Code Was Trusted
Nobody typed a password into the company laptop.
Nobody downloaded malware.
Nobody opened a suspicious attachment on the protected corporate device.
The user simply scanned a QR code.
The email looked routine. The message felt familiar. The Microsoft 365 login page on the phone looked close enough to trust.
But the QR code was not there to make life easier.
It was there to move the attack away from the endpoint, away from desktop security controls, and into a mobile sign-in flow where the user was more likely to trust what they saw.
This Agent Foskett briefing looks at QR phishing attacks, often called quishing, where attackers use QR codes to trigger credential harvesting, session theft, suspicious Microsoft 365 sign-ins and post-authentication activity that may not look like a traditional malware incident.
The laptop stayed clean.
The phone became the attack path.
Briefing summary
QR phishing attacks move users away from protected corporate devices and into trusted mobile authentication workflows. The page may look legitimate, the sign-in may succeed and the resulting session may appear valid — while the attacker gains access behind the scenes.
Why QR phishing works
Why defenders miss it
First hunt: suspicious mobile sign-ins
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
SigninLogs | where TimeGenerated > ago(7d) | where ClientAppUsed has_any ("Mobile", "Browser") | project TimeGenerated, UserPrincipalName, IPAddress, Location, AppDisplayName, ClientAppUsed, DeviceDetail, ConditionalAccessStatus, ResultType | order by TimeGenerated desc
Second hunt: emails likely to contain QR lures
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
EmailEvents | where Timestamp > ago(14d) | where Subject has_any ("QR", "scan", "verify", "document", "voicemail", "invoice", "payroll") | project Timestamp, RecipientEmailAddress, SenderFromAddress, SenderMailFromAddress, Subject, DeliveryAction, ThreatTypes | order by Timestamp desc
Third hunt: what happened after the scan?
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
CloudAppEvents | where Timestamp > ago(14d) | where Application has_any ("Exchange", "Office 365", "Microsoft 365", "SharePoint", "Azure AD") | where ActionType has_any ("MailItemsAccessed", "FileDownloaded", "New-InboxRule", "Consent to application") | project Timestamp, AccountDisplayName, ActionType, Application, IPAddress, RawEventData | order by Timestamp desc
Common signs of QR phishing
Where defenders get caught
How GEMXIT approaches this type of investigation
Final thought
The user never noticed anything suspicious.
The QR code simply moved the attack somewhere defenders were not watching closely enough.
The real question became:
“Did the phone just approve the attacker?”
It is: “Where did the user complete the attack?”
Continue the investigation with The MFA Prompt Looked Normal, The User Passed MFA But It Wasn't Really Them, The Session Token Never Expired, The Login Came Through A Trusted Device, The User Clicked Accept And Gave Away The Entire Mailbox, EmailEvents KQL Guide, Microsoft Defender KQL Threat Hunting Guide, Microsoft Security and the GEMXIT Security Review.
Develop IT. Protect IT.GEMXIT PTY LTD | GEMXIT UK LTD