Hi ,

Lately, I’ve been working on a small project called deaddrop.space. I’m posting it here because I thought it might be handy to those who care about privacy and control over their data.

It’s a secure, anonymous file-sharing platform built to prioritize privacy, control, and simplicity. Unlike typical services that ask you to sign up, verify emails, or accept endless terms, DeadDrop lets you upload and share files — no accounts, no tracking, no nonsense.

Here’s how it works:

  • You upload a file, set a name, password, expiry date, and max number of downloads.
  • To share it, just provide the recipient with the name and password (or a direct link).
  • Files are encrypted in the browser using AES-256 before they ever leave your device.
  • No raw files or passwords are sent to the server — it’s zero-knowledge encryption.

That means even I, the creator, can’t decrypt or access the files.

BTW, it is open source : https://github.com/Rayid-Ashraf/deaddrop

Would love to hear what you all think — feedback and suggestions are welcome!

  • Arthur Besse@lemmy.ml
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    9 days ago

    TLDR: this is way more broken than I initially realized

    To clarify a few things:

    -No JavaScript is sent after the file metadata is submitted

    So, when i wrote “downloaders send the filename to the server prior to the server sending them the javascript” in my first comment, I hadn’t looked closely enough - I had just uploaded a file and saw that the download link included the filename in the query part of the URL (the part between the ? and the #). This is the first thing that a user sends when downloading, before the server serves the javascript, so, the server clearly can decide to serve malicious javascript or not based on the filename (as well as the user’s IP).

    However, looking again now, I see it is actually much worse - you are sending the password in the URL query too! So, there is no need to ever serve malicious javascript because currently the password is always being sent to the server.

    As I said before, the way other similar sites do this is by including the key in the URL fragment which is not sent to the server (unless the javascript decides to send it). I stopped reading when I saw the filename was sent to the server and didn’t realize you were actually including the password as a query parameter too!

    😱

    The rest of this reply was written when I was under the mistaken assumption that the user needed to type in the password.


    That’s a fundamental limitation of browser-delivered JavaScript, and I fully acknowledge it.

    Do you acknowledge it anywhere other than in your reply to me here?

    This post encouraging people to rely on your service says “That means even I, the creator, can’t decrypt or access the files.” To acknowledge the limitations of browser-based e2ee I think you would actually need to say something like “That means even I, the creator, can’t decrypt or access the files (unless I serve a modified version of the code to some users sometimes, which I technically could very easily do and it is extremely unlikely that it would ever be detected because there is no mechanism in browsers to ensure that the javascript people are running is always the same code that auditors could/would ever audit).”

    The text on your website also does not acknowledge the flawed paradigm in any way.

    This page says "Even if someone compromised the server, they’d find only encrypted files with no keys attached — which makes the data unreadable and meaningless to attackers. To acknowledge the problem here this sentence would need to say approximately the same as what I posted above, except replacing “unless I serve” with “unless the person who compromised it serves”. That page goes on to say that “Journalists and whistleblowers sharing sensitive information securely” are among the people who this service is intended for.

    The server still being able to serve malicious JS is a valid and well-known concern.

    Do you think it is actually well understood by most people who would consider relying on the confidentiality provided by your service?

    Again, I’m sorry to be discouraging here, but: I think you should drastically re-frame what you’re offering to inform people that it is best-effort and the confidentiality provided is not actually something to be relied upon alone. The front page currently says it offers “End-to-end encryption for complete security”. If someone wants/needs to encrypt files so that a website operator cannot see the contents, then doing so using software ephemerally delivered from that same website is not sufficient: they should encrypt the file first using a non-web-based tool.

    update: actually you should take the site down, at least until you make it stop sending the key to the server. I am deleting your post now; feel free to PM me if you want to discuss this any further.