In Digital Ocean, S3-like space keys can access all your buckets
ideas.digitalocean.com
ideas.digitalocean.com
For a simple example, I'm running externaldns on a kubernetes cluster. For production use, I'd want to at least have an API key that can only access the DNS domains and nothing else. As is, the key can create compute resources or delete anything (including object storage buckets!). Again with no dev/prod isolation, so a leaked dev key that looks innocuous means your prod resources are now compromised.
Some second tier providers do better at this, OVH and scaleway both have some concept of ACLs, but DO just don't even try.
Apologies for the slight rant but it's frustrating to see something so basic overlooked by a company the size of DO.
There is a other mechanism DO has to allow multiple accounts under one billing context (I think it might be called 'teams'?) but sadly this is still extremely coarse grained, and doesn't allow you to lock a key down to a particular resource, or even a class of resources.
Still not ideal, but it minimised security risk and kept things organised.
Whilst AWS is more expensive and perhaps over-engineered for our use-case, it was absolutely essential to have some kind of ACLs.
I mean, I can't exactly give my junior dev access to DO if it means he can also delete the entire production database and all backups with a misclick.
However, in Digital Ocean, by design, you can't restrict keys to certain buckets. Once you issue a key, it can access all buckets within your project, with all operations (list, read, delete) files.
The issue has been reported and is known for a long time. It's even the top voted "idea" in the company portal.
Posting this here in hopes to bring awareness of this issue.
They had issues with DNS PTR records too for years. Same for initial auth tokens being global. I had hopes for them and used them exclusively at 1 time.
Obviously you have to pay for resources for that proxy, and it's probably going to want a large bandwidth allocation. Lucky because DO doesn't charge for bandwidth.
From their product docs:
Droplets have their own transfer allowance, independent of Spaces. Traffic from Droplets to Spaces does not count against your Spaces transfer allowance (because inbound bandwidth to Spaces is free), but does currently count against your Droplets’ outbound transfer allowance.
https://docs.digitalocean.com/products/spaces/details/pricin...
If you want to say what you think is important about a page, that's fine, but do it by adding a comment to the thread. Then your view will be on a level playing field with everyone else's: https://hn.algolia.com/?dateRange=all&page=0&prefix=false&so.... Alternatively, you could have made a text post to communicate what you think is important about the issue, and then your title would have been fine.
What's not ok on HN is to use the title field as a way to comment on an issue, because then the submitter gets a privileged position relative to other commenters. Since the title is by far the largest influence on a thread, we want to avoid that. Being the submitter of a page shouldn't confer any extra special power over the discussion.
I honestly find it hard to understand why this kind of basic security feature wasn't in GA.
[1]: https://community.cloudflare.com/t/r2-token-per-bucket/38906...
They are at the top of the list of companies with which I will never do business.
https://github.com/fog/fog/issues/2525
https://github.com/fog/fog/issues/2525#issuecomment-31336855
I’ve been a DO customer for the better part of a decade, but there is no way that I can continue to be a customer with a company that has such a blasé stance toward security and protecting customer data.
If anyone can suggest any alternatives that are not Hetzner, I would be interested.
And they give you an excuse that it’s time consuming for them and you should respect their time.
Would you bank with them?
This is a pathetic response and you are dragging your former company through the mud by putting the incompetence that you participated in, front and center.
It’s amazing that this happened so long ago and yet you seemed to have learned nothing from it, and now want to double down on your right to leak sensitive data (because it was convenient at the time)
Before the GDPR the EU had the 1995 Data Protection Directive, which you would have to comply with to have EU customers.
You can’t just decide to not follow the law because you’re a startup.
In the event your google is broken:
----
https://en.wikipedia.org/wiki/Data_Protection_Directive
>the controller must implement appropriate technical and organizational measures to protect personal data against accidental or unlawful destruction or accidental loss, alteration, unauthorized disclosure or access, in particular where the processing involves the transmission of data over a network, and against all other unlawful forms of processing.
Should I explain this too?
Do you know what else ties up a lot of resources? Civil action, negligence claims, PR disasters.
This specific GitHub issue is one of several why I will never use DO: language, official response, and attitude all matter. I'd be curious to know how much revenue DO has lost because of this one issue.
There is precisely zero circumstance where it is ok to give private customer data to another customer.
The fact that you think it had anything to do with an API or how it is used is all anyone needs to know about it.
The idea that warning your customers of your vulnerabilities is "irresponsible" is only true if you care more about revenues than your customers' security.
I was using DO. It is not a serious project but I think I'll be moving on nonetheless.
Now I just need to find a cloud hosting service that will do a low cost easy k8s cluster, preferably not AWS.
At a certain point a default behaviour can be so bad, and so clearly not what a user would expect or want, that it constitutes a security issue. I would think this _more_ than qualifies.
The official blog from DigitalOcean is here:
https://www.digitalocean.com/blog/transparency-regarding-dat...
While it does not call it a “security issue” directly, it details several changes to the service to prevent customer data leaking between accounts. That seems to contradict your position that there was no problem.
> 10 years later and I still remember how pissed off I was that day, hah.
I would have hoped that after 10 years you would be able to admit that letting customers read each other’s data was a mistake. The existence of a disk scrub API, the problem being improperly reported, and DO being advertised as “not for production use” are not valid excuses.
This issue is the reason why I will never use DO or recommend it to a customer.
I wonder how one could test for that “automatically” on other providers.
I reported it, they fixed it quickly, but never acknowledged that it was a "security" issue.
There is basically no granularity.
{"auths":{"registry.digitalocean.com":{"auth":"<base64-encoded-credentials>"}}}
If you decode the base64 encoded credentials it will be a string like "<token>:<token>" with either a read only or read/write token to all of the resources on DO.think my reply shortness maybe has you misunderstanding me?
The fact that an API token can only have read/write project wide basically results in everything you said.
No RBAC on services. No RBAC on specific API actions. Anyone with read+write can do/nuke everything.
That’s why I’m migrating $COMPANY off to AWS as fast as I humanly can by myself.
> you can simulate what `doctl registry login` does by using an API token string as the username and password when calling `docker login`
https://docs.digitalocean.com/products/container-registry/ho...
However I absolutely would be using Spaces as storage alongside any apps running on DO, and would have assumed that all the usual per-bucket permissions I'm used to elsewhere were present, so thanks for the heads up!
https://www.openwall.com/lists/oss-security/2023/09/26/10
---
A flaw was found in Ceph RGW. An unprivileged user can write to any bucket(s) accessible by a given key if a POST's form-data contains a key called 'bucket' with a value matching the name of the bucket used to sign the request.
The result of this is that a user could actually upload to any bucket accessible by the specified access key as long as the bucket in the POST policy matches the bucket in said POST form part.
We have assigned it a CVE of CVE-2023-43040 and the patch is attached.
Credits to Lucas Henry of Digital Ocean.
I am looking into blackblaze and other providers.
As seriously, Digital Ocean contains a critical flaw in their operations management that will delete all of your long standing droplets with a valid credit card on file and zero issue with the conduct of the droplets or with the credit card.
[1] https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObje...
[2] https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteOb...
The console isn't magic however, it makes the same ListObjectsV2 + DeleteObjects calls in parallel.
There is a critical flaw in their operations management that will delete all of your long standing droplets with a valid credit card on file and zero issue with the conduct of the droplets or with the credit card.
For people trying to figure out if their provider is using Ceph, make a request for https://<s3-endpoint>/test and see if the x-amz-request-id header begins with "tx000", if it does, then they're using Ceph.
$ curl -sSi https://nyc3.digitaloceanspaces.com/test/ | grep x-amz-request-id
x-amz-request-id: tx00000947bc21a401c0f02-00651981d1-4b6a0-nyc3d
Access request needs to be created, validated, logged, processed, expired or revoked.
Or just validated, processed, and logged.
Tailscale uses it as their main host for the repos, snd its down right annoying with no CDN and slowdowns occuring often.
So the title is ambiguous, it could mean that keys have to be unique across buckets since they share the same namespace.