возможно в Talks? Не знаю.
Несколько дней назад чёрт меня дёрнул озаботится вопросом «безопасности» сервиса OneTimeSecret.
После относительно внимательного изучения обнаружилось вот что: проект играет на ожиданиях и, возможно, ещё и лжёт.
1. Многие верят или хотят, чтобы верили другие
Во всяческих статьях по безобразности для хакеров OTS активно форсят. Например:
Там встречается такое:
The secret is encrypted and password protected, hence it is immune to interceptions and man-in-the-middle attacks.
The password-protected secret ensures the message isn’t tampered with in transit.
The sender can set an autodestruct timer for the secret. Thus, even if the message is not opened, it will be destroyed after a certain period.
То есть утверждается:
- Секрет шифрован.
- Защищён паролем.
- Устойчив к MITM.
- Пароль защищает от подмены.
- Если сообщение не было открыто, оно будет уничтожено.
Спойлер:
1, 2, 3 — правда.
4, 2, 1, 3 — ложь.
5 — мы не знаем!
2. «Автор»
Вот этот пацан: Деланó Engineering leader and expert in high-performing teams and secure systems. Former VP Engineering at health tech startups. Passionate about privacy and open source. Aiming to develop essential web security tools full-time.
Что он нам расскажет про своё поделие?
I built One-Time Secret as a way to share sensitive information that’s both simple and secure.
I built
secure
Строитель, значит.
4,784 commits [848,342 ++ | 708,361 –]
https://github.com/onetimesecret/onetimesecret/graphs/contributors
~ allows you to send sensitive information in a safe way knowing it’s seen by one person only.
Если бы он сказал ‘thinking’ — был бы прав.
~ we decided to err on the side of simplicity.
Languages
Ruby 45.9% (30+KLOC)
Vue 30.3%
TypeScript 20.7%
HTML 1.2%
Python 0.8%
Shell 0.8%
Other 0.3%
Желания лезть в их код нет.
Why should I trust you?
General we can’t do anything with your information even if we wanted to (which we don’t). If it’s a password for example, we don’t know the username or even the application that the credentials are for.
Ахахаха! https://github.com/onetimesecret/onetimesecret/issues/281
If you include a passphrase (available under «Privacy Options»), we use it to encrypt the secret. We don’t store the passphrase (only a bcrypted hash) so we can never know what the secret is because we can’t decrypt it.
Мы не храним. Мы не логируем. Мы что угодно!
Ага. В основном.
Beside all that, the code is opensource so you can review the code and/or run your own instance.
А вот это хорошо!
3. Пригорело
https://onetimesecret.com/en/about/
How do you handle data requests from law enforcement or other third parties?
~in most cases, we simply don’t have any data to provide in response to such requests~
ИН МОУСТ КЕЙСИЗ!!! А изредка?
4. К делу
HTTPS for all connections
encryption at rest for stored data
Собственно на этом всё. Да, есть TLS. Но данные идут открыто.
Один ключ на бэке: https://docs.onetimesecret.com/en/self-hosting/environment-variables/
SECRET=your-32-char-hex-key # Secret key for sessions and encryption (REQUIRED) - DO NOT change after setting
Вот рассказывают как отправить «секрет»: https://docs.onetimesecret.com/en/rest-api/v1/create-secrets/
$ curl -X POST -u 'USERNAME:APITOKEN' -d 'secret=SECRET&ttl=NUMBER_IN_SECONDS' https://us.onetimesecret.com/api/v1/share
Ну то-есть так и написать им «ето сикрет».
Query Params
secret: the secret value which is encrypted before being stored. There is a maximum length based on your plan that is enforced (1k-10k).
И ещё внимательней:
passphrase: ~ is also used to encrypt the secret and is bcrypted before being stored so we only have this value in transit.
Да. Через ?passphrase=мойчучун
отправляешь им пароль. Ну хранить они его не будут, честно. Даже логировать!
Я ничего не смыслю в Ruby. Мне гпт5 пишет, что в apps/api/v1/logic/secrets/base_secret_action.rb
.
- Подменят данные удалённо — и не заметишь.
- Будет у юзера «доверенный сертификат» от начальства (компании\сраны) — им даже клиент подменять не надо будет: снифай себе и снифай.
- Логировать будут. И пароль положат себе в файлик, а потом продадут.
5. Под прикрытием MIT LICENSE
Дядька заявляет: безопасно, зуб даю! (я инжинер) Мы шифруем! (и даже httpS — секуре) Вот код: (30к)
И правда ведь шифруют. И канал связи шифрован, сертификат, AES GCM, ключ 256 бит, и всё такое. Но это не то, что ожидаешь. Хотя открыто e2e никто не обещал! И это подло, я считаю. Это либо злой умысел (меня купили\заставили\я и сам рад), либо из корысти (я заработаю\всей правды не скажу), либо что? Что мешает, пусть и в браузере, сделать по-честному шифрование?
И я
А я несколько раз имел неосторожность советовать этот сервис. Стыдно.
P. S. А что, пока я сидел, всюду кроме новостей запретили спойлеры?