Безопасность
casty не проходил аудит. Эта страница перечисляет, что он хранит и что может каждая часть.
Секреты
Заголовок раздела «Секреты»| Секрет | Где он | Что он может | Как отозвать |
|---|---|---|---|
| Seed-фраза | В памяти, пока работает casty init или casty key revoke; никогда не записывается на диск и никуда не отправляется. С casty init --fid и ключом, добавленным со страницы кошельком, casty вообще её не видит |
Всё: она держит custody вашего fid | casty не может. Храните её офлайн |
| Ключ приложения (Ed25519) | ~/.config/casty/keys.enc.json, зашифрован scrypt и XChaCha20-Poly1305, режим 0600 |
Подписывать касты, реакции и подписки для вашего fid, пока не истечёт без использования (по умолчанию 30 дней, не больше 90) | casty key revoke <key> с seed-фразой или --self самим ключом |
Подписанный KEY_ADD, ещё не подтверждённый |
В том же зашифрованном хранилище, пока casty init не увидит ключ в списке или нода не отвергнет сообщение |
Добавить этот один ключ, один раз | casty key revoke, если он когда-нибудь сольётся |
| Пароль хранилища ключей | Вводится в скрытом поле | Расшифровать ключи приложений на этой машине | Отозвать ключи, удалить keys.enc.json, запустить casty init |
| Токен casty web | ~/.config/casty/web-token, режим 0600; в хранилище связанного браузера |
Пока работает casty web: читать ленту и писать вашим ключом приложения, откуда бы ни была доступна страница |
Остановить casty web, затем запустить его с --new-token |
То же самое на хосте ноды (1-node.sh serve) |
~/snapchain/casty/config/keys.enc.json (0600), пароль в ~/snapchain/casty/passphrase (0600, Docker-секрет), токен в ~/snapchain/casty/config/web-token; ключ расшифрован в памяти сервиса, пока он работает |
Читать и писать от вашего имени из любой сети, пока работает сервис; root на хосте получает ключ | casty key revoke <key> с seed-фразой; docker compose stop casty на хосте; --read-only оставляет ключ дома |
Пара ключей для push и подписки (casty serve) |
~/snapchain/casty/config/vapid.json (0600) и cache/push.json на хосте |
Отправлять push, «new mention from @name», подписанным браузерам; push-сервис видит только шифротекст | Удалить оба файла и перезапустить casty; выключить уведомления в браузере |
Облачный токен (HCLOUD_TOKEN, учётные данные AWS) |
Ваше окружение; скрипты никогда его не записывают | Создавать и удалять серверы в этом аккаунте | Отозвать его в консоли провайдера |
| SSH-ключ | Ваш; загружается только публичная половина | Входить на хост ноды с правами root | Удалить его с хоста и у провайдера |
Seed-фраза управляет всем аккаунтом. Для этого руководства используйте тестовый аккаунт, вставляйте
seed-фразу только в программы разработчиков, которым доверяете, и предпочитайте ключ, одобренный вашим
кошельком: casty init --fid <fid>, затем casty web и в разделе о вас «add a key with your wallet».
Запрос seed-фразы читает из терминала с выключенным эхо. С --mnemonic-stdin фраза
вместо этого приходит из канала, а запрос пароля по-прежнему читает терминал. casty обнуляет
байты фразы после использования; строку, переданную библиотеке вывода ключей, и ключ, который она
выводит, в JavaScript нельзя стереть из памяти.
CASTY_PASSPHRASE заменяет запрос пароля. Он существует для тестов и pnpm demo; не
используйте его для хранилища ключей, в котором лежит настоящий ключ.
Что доступно извне
Заголовок раздела «Что доступно извне»- На арендованном хосте файрвол открывает SSH (22), HTTP API (3381) и gRPC (3383) только для
--allow-ip, по умолчанию для вашего собственного адреса. Gossip (3382) открыт для всех, чтобы другие ноды могли подключаться. Хост, который у вас уже есть, не получает файрвола от casty. - statsd (8125/udp, 8126/tcp) и Grafana (3000) публикуются только на loopback хоста,
statsd через собственные переменные compose-файла
STATSD_PUBLISHв.env, Grafana через override-файл. Парольadminдля Grafana — случайный, записанный в.env; для просмотра вход не нужен, как задано вgrafana.iniот Snapchain. - casty общается с вашей нодой через SSH-туннель на
127.0.0.1:3381. Он не вызывает хостинговый API Farcaster. Публичный реестр fname наfnames.farcaster.xyzспрашивается только об имени, которого нода не знает:@name, на которое вы подписываетесь или которое упоминаете в касте (--no-allow-fname-serverвыключает это), читаете черезfeed --fidsили ищете вcasty web, и об авторе каста, который вы указываете ссылкой на farcaster.xyz. RPC OP Mainnet спрашивается, только когда вы передаёте--op-rpc. casty webслушает на 127.0.0.1, если--listenне называет другой адрес, и каждому запросу к API нужен его токен. В браузере и на телефоне перечисляет, как защищена страница и что меняется, когда телефон обращается к ней по локальной сети.1-node.sh serve --domainоткрывает страницу в интернет по HTTPS (80 и 443, открытые через0-provision.sh --https);--tailscale— только в ваш tailnet. Тогда странице нужен её токен, она отправляет HSTS и отвечает одному адресу не больше чем на 120 запросов к API в минуту. Из любой сети перечисляет, что хранится на хосте.- Касты других людей могут содержать управляющие последовательности терминала. casty удаляет управляющие символы и переопределения направления текста, прежде чем их печатать, а веб-страница вставляет текст каста как текст.
Если что-то утекло
Заголовок раздела «Если что-то утекло»- Ключ приложения:
casty key listпоказывает, что зарегистрировано на ваш fid. Отзовите ключ черезcasty key revoke <key> --selfс машины, на которой он ещё есть, или seed-фразой откуда угодно. - Seed-фраза: перенесите fid на новый custody-адрес кошельком, которому доверяете, затем отзовите каждый ключ приложения.
- Облачный токен: отзовите его, затем поищите в аккаунте серверы, которые вы не создавали.
- Токен casty web: остановите
casty webи запустите его снова с--new-token. Каждая ссылка, напечатанная раньше, перестаёт работать. На хосте ноды: удалите~/snapchain/casty/config/web-tokenи выполнитеdocker compose restart casty. - Хост ноды: отзовите ключ приложения seed-фразой, удалите
~/snapchain/castyи считайте хост скомпрометированным и для ноды тоже.
Как сообщить о проблеме
Заголовок раздела «Как сообщить о проблеме»Сообщайте об уязвимостях приватно через security advisories репозитория, а не в публичном
issue. В SECURITY.md репозитория та же таблица.