TL;DR
- One phone call talked a Qantas agent into authorizing a fake app in Salesforce; no password stolen, no MFA triggered.
- The attacker inherited the agent’s own permissions and pulled 5.67M customer records via bulk API queries.
- OAIC closed its inquiry in July 2026 with zero penalty, despite a theoretical A$7B+ maximum fine.
- Root cause was a business logic gap, not an identity failure as nothing was watching what an authorized session was doing
- Fix: continuous behavioral monitoring of sessions and connected apps, not just tighter access control.
One phone call. One deceived agent. 5.7 million exposed records and zero regulatory penalty. That’s the uncomfortable arithmetic behind the Office of the Australian Information Commissioner’s July 2026 decision to close its inquiry into the 2025 Qantas data breach without action. The airline had spent a year under the shadow of Australia’s toughest privacy penalty regime, facing a theoretical maximum exceeding A$7 billion. In the end, it will pay nothing. Not because the breach wasn’t serious. Attackers extracted 5.67 million customer records, including Frequent Flyer data, contact details, and personal information for 1.7 million people, and later leaked them through an extortion group. The regulator simply concluded that no reasonable set of controls, including ISO 27001 compliance, would have stopped this specific attack.
That finding should unsettle every security and product leader relying on identity and access management as the primary line of defense. The Qantas breach wasn’t a failure of authentication. It was a failure to see what an authenticated, authorized, perfectly legitimate session was doing once it had the keys.
What Happened
The attack never touched a password. On a Saturday in June 2025, a threat actor called an overseas contact center agent working for a third-party Qantas provider, posing as internal IT support. The agent was walked through what looked like a routine ticket-closing process on Salesforce’s connected-app setup page, entering an eight-digit code that registered the attacker’s modified version of Salesforce’s own Data Loader tool as a trusted application.
From that point, the attacker didn’t need to log in at all. The agent’s own session authorized the connection, and Salesforce issued an OAuth token carrying every permission that agent already held, including visibility into the full customer contact database. The attacker’s tool used that access to run bulk API queries, quietly pulling records over a weekend while two resulting login-anomaly alerts sat unread until Monday morning.
By the time Qantas froze the account, the exposure was done. The company disclosed publicly within days and notified affected customers by 9 July, but the underlying vulnerability: a default Salesforce setting that let any end user, not just administrators, approve third-party app connections, had already done its damage.
Root Causes
The phishing call was just the entry point. The real story is four compounding gaps that let one deceived employee become a 5.7 million record breach.
- Permissions design flaw: Salesforce’s default configuration let ordinary end users, not just admins, authorize new connected apps. Role-based access controls never came into play: the attacker’s tool didn’t bypass anything, it simply inherited whatever the deceived employee was already allowed to do. Access control correctly answered “who is this?” at every step. It never asked “should this session be doing this?”
- Consent-phishing blind spot in training: Security awareness programs are built almost entirely around credential theft: don’t click the link, don’t type your password into a fake page. Almost none address consent phishing, where the victim isn’t tricked into handing over a secret but into actively approving something that looks like routine IT process. The OAIC flagged this as an industry-wide gap, not a Qantas-specific one, and concluded standard training likely wouldn’t have stopped it.
- Unbounded blast radius: A single contact center agent could see the entire customer base. That’s how many CRM platforms are scoped by default, not a misconfiguration but it meant the distance between “one employee deceived” and “5.7 million records exposed” was zero additional steps.
- Detection lag: Two login-anomaly alerts fired during the attack but sat unread until Monday morning, because detection depended on a human reviewing alerts during business hours. The attack landed on a Saturday specifically because that assumption holds.
What Could Have Prevented It
Every control the OAIC pointed to shares a common thread: each one lives at the layer of what an authorized session does, not who was authorized to log in. That’s the gap between an identity-focused security posture and a business logic-aware one and it’s exactly where this breach slipped through.
- Admin-only app authorization: Restricting connected-app approval to administrators; the fix Salesforce has since made the global default closes the specific entry point used here.
- Real-time exfiltration monitoring: Bulk extraction of millions of records through a valid, authenticated API session isn’t a login anomaly, it’s a behavioral one. Flagging that pattern the moment it starts, rather than waiting for a human to review alerts, is what turns a 36-hour undisturbed window into a blocked session.
- 24/7 alert triage: Attackers deliberately strike on weekends because they know detection is business-hours-only. Around-the-clock monitoring removes that window.
- Rate limits and approval gates on mass retrieval: Even a successfully deceived session shouldn’t be able to pull millions of rows unchallenged. Throttling or step-up approval on bulk queries shrinks the blast radius after authorization has already succeeded.
- Callback verification for unsolicited IT contact: A mandatory ticket-number check or callback to a known internal line directly counters the social engineering pretext that started the chain.
Every one of the controls above depends on watching behavior inside an authorized session, not just verifying the session’s credentials and that’s the layer identity and access tools were never built to see. AppSentinels’ Business Logic Graph continuously maps how users, apps, and API sessions actually interact with data and workflows, so a contact center agent’s session suddenly running bulk extraction queries it has never run before shows up as a deviation in real time, not a login alert someone reads two days later. The Qantas breach didn’t need a stolen password to succeed. Catching it required watching the business logic, not the login page.
The Regulatory Signal Worth Noting
The OAIC’s decision not to penalize Qantas is not an endorsement of the status quo; the regulator said as much explicitly, and complaints over the breach are still being handled separately. But the underlying finding is worth sitting with: an organization can maintain ISO 27001 compliance, require it of its vendors, and still be found to have done everything reasonable available at the time and still lose 5.7 million customer records to a single phone call. Compliance frameworks and access controls set a floor. They were never designed to catch a legitimately authorized session doing something it shouldn’t.
For security and product leaders, the lesson isn’t that Qantas got lucky with the regulator. It’s that “reasonable” defenses, as currently defined across the industry, have a structural blind spot at exactly the layer where this attack and a growing number like it actually happened.
Book a demo to learn how AppSentinels helps you stay ahead of such breaches.
FAQs
What caused the Qantas data breach?
How many records were exposed in the Qantas breach?
Why wasn’t Qantas fined for the breach?
Could multi-factor authentication have stopped this attack?
What is the single change that would have prevented the Qantas breach?