Critical cross-account vulnerability in Microsoft Azure automation service
orca.security
orca.security
Security flaws happen but as someone who’s not a security professional, this seems pretty inexcusable to me.
1. The presence of a formal threat model
2. A process for applying controls against that threat model
3. Evidence that the process is being followed (for a type 2)
This is actually pretty good. It's just also easy to game. It's totally on you to say what your threat model is, to say what controls you've accounted for, what risks you've accepted, etc. An auditor might call you out like "no, encrypting data at rest doesn't address password reuse", but you have a lot of control over how the whole thing plays out.
That means that most companies basically just buy their way out of SOC2 by having a compliance team that retroactively works to map what currently exists to a standard threat model provided by NIST. What happens less often is that people actually do the work the intended way - starting with a model, creating a process, and then creating an audit trail for it.
If they did, honestly, SOC2 would have a lot of value. It is a very sound approach to security. But, as with all cost centers, the goal is to minimize the cost of security, not to do it well.
Between this and https://www.rapid7.com/blog/post/2021/09/15/omigod-how-to-au..., I’m starting to lose faith in the security of Azure.
Sadly, there is nothing resembling beauty in that screen. It's a multi-page wizard that attempts to guide you through what should be a simple filter commandline to a frustrating exercise in in trying to convince the tool that yes, I do want to filter on an email address that is not in my address book.
It's from the era when the Internet just started becoming popular, and having hyperlinks instead of buttons was being introduced for no good reason at all.
https://sra.io/blog/letitgo-a-case-study-in-expired-domains-...
Spooky stuff for sure.
The more the cloud is exposed as "just someone else's computer" the easier it is to push back the often false narrative of "too big to be insecure"
"The issue was found and reported all in the same day. Microsoft fixed it within 4 days, classified it with critical severity and awarded a $40,000 #BugBounty"
This has happened time and time again to the point where their repeatable security design, process, and validation is demonstrably systemically incapable of rejecting even grossly insecure systems. The benefit of the doubt for the quality of their systems should not be extended to a process that consistently produces abject failures. To assume anything other than the level of quality they produce regularly is an extraordinary claim that requires extraordinary evidence and independent objective verification. So actually, yes, you should freak out if you rely on the security of Azure (or any other cloud for that matter) without independently verifying the quality of every single service you use since their pattern of grossly incompetent security process means you should default to assuming their systems are terrible.
[1] https://azure.microsoft.com/en-us/services/automation/#secur...
[2] https://www.commoncriteriaportal.org/files/ccfiles/CEMV3.1R5...
I’d say your assumptions are wrong there. Security is not one of the main reasons for moving to the cloud. It’s not even _a_ reason to. Delegating responsibility for security might be cited as a reason but that’s not the same as saying the cloud is “more” secure. That’s just saying you are you don’t want to pay for security yourselves. Which is a whole different thing to what you’re claiming.
1. They’ve lost all their sysadmins / security staff and thus need to outsource that governance
2. When they’re looking to delegating responsibility (ie say to the customers “it’s an Azure issue, they’re fixing it”).
In both instances it’s not about Azure / AWS / GCP being more secure, it’s about _WHO_ owns the responsibility for securing.
The difference is important.
More often the actual reasons for migrating to the cloud are cited as cost saving (which is often misunderstood too but that’s another topic) and quicker deployment times (this is probably the strongest valid argument in my opinion)
This is so... wrong. Makes me shudder. It's a bit like saying "I have so many credit cards, I must be really rich!".
Finding this should have been trivial for MS. And further, why would you only have one mechanism for tenancy enforcement? Networking is a fine boundary, but there should have been a token as well.
Honestly, this bug, and this comment on the recent ChaosDB bug, https://news.ycombinator.com/item?id=29296170, make me think that Azure just doesn't know how to do tenant segregation securely. These types of bugs where some small flaw allow complete takeover of other accounts (or worse, complete takeover of the whole service) are pretty catastrophic.
Totally broken features are regularly shipped and stay broken.
A random example: Application Gateway shows 5 metrics if you open one in the Portal on the first page. Two of those metrics aggregate a rate (Mbps) using sum instead of avg.
40% of their front-and-center graphs show gibberish, and that’s been like that for probably years.
No one tested any of this. Not a security person, not a UX person, or any manager.
PS: Take a look at the cypher suites offered by App Gateway and its and TLS defaults. Note the current year. Now consider that this is their security product with Web Application Firewall functionality!
Would you trust their WAF to keep you safe? Or just tick a checkbox that some auditor says needs ticking?
That took almost no time or effort to realize.
1. Try to hard to get security to be "it just works" feature
2. Too much handwavy "it's secure because we're in the cloud and say it's secure" logic going on
The default values of the service include Managed Identity being set to ON.
This default means you don't have to provide or rotate any secrets and the service (which you can get a token to without authenticating) has access to all resources that can be authenticated with Active Directory. So full compromise at root level through a GET request to an endpoint with no authentication.
Do I have this right? Wow.