-
Notifications
You must be signed in to change notification settings - Fork 0
RU Security
Supply-chain трафик компонента DNSCrypt следует той же DNS privacy boundary: GitHub release API, archive, signature и redirect-hosts разрешаются через Cloudflare DoH поверх Shadowsocks с резервным Google DoH, после чего соединение идёт через активный локальный SOCKS5. Установка/обновление компонента намеренно не использует Windows/system resolver для этих hostnames.
Не публикуйте exploitable details, proxy credentials, subscription URLs, tokens или приватный конфиг в открытом issue.
Предпочтительно использовать GitHub Private Vulnerability Reporting. Если он недоступен — создайте минимальный безопасный report без секретов.
Полезно указать:
- версию/commit;
- Windows build;
- User/Admin/Game Mode;
- воспроизведение;
- очищенные logs.
Дополнительного review требуют:
-
settings.jsonrollback и schema migration; - startup-copy/HKCU Run;
- embedding/materialization
NetworkService; - UAC и named-pipe handshake;
- WinDivert download/hash/runtime cleanup;
- automatic self-update;
- DNSCrypt signature/catalog/runtime;
- plugin archive extraction и executable discovery;
- password/import display behavior.
Обновление fail-closed:
- принимаются только канонические assets текущего GitHub repository;
- ZIP и
.sha256обязательны; - SHA-256 должен совпасть;
- ZIP должен содержать ровно root
Shadowsocks.exe; - payload FileVersion должен быть строго новее target;
- staged updater проверяет собственный SHA-256;
- target replacement имеет rollback;
- равная версия и downgrade запрещены.
Если процесс запущен из LocalAppData startup-copy, обновляется записанный primary EXE.
Активный DNSCrypt не должен уходить в plaintext/system-DNS fallback. Automatic mode выбирает конкретные DNSCrypt/DoH resolvers из проверенного catalog после фильтров DNSSEC/no-log/no-filter/address-family. ODoH отключён.
WinDivert 2.2.2 x64 скачивается по требованию и принимается только после проверки pinned SHA-256. DLL/driver не входят в release ZIP.
SIP003 plugin package — сторонний executable. ZIP/TAR.GZ extraction должна запрещать:
-
..traversal; - absolute paths;
- выход за staging directory;
- TAR symlink/hardlink/special entries.
Background network update разрешён только для доверенных repository mappings встроенного каталога; manual archives не auto-update, произвольные repository URL не принимаются. Download/extraction ограничены по размеру и числу entries; кроме traversal/absolute paths запрещены Windows alternate-data-stream имена. Если GitHub публикует SHA-256 digest asset-а, он проверяется перед promotion. Если installed и candidate release tags распознаются как версии, более старая candidate-версия отклоняется, предотвращая downgrade. Замена выполняется через staging + rollback-safe swap; orphaned backup после аварийно прерванного swap восстанавливается при следующем чтении plugin storage. Плагины остаются под active storage root и не должны перемещать mutable files рядом с product EXE.
Local GeoSite/EasyList/ABP routing выполняется managed C# FilterEngine. Исторический исполняемый abp.js отсутствует. Online PAC — отдельный явно выбранный внешний PAC и должен рассматриваться как пользовательский код.
Клиент не управляет proxy server infrastructure. Доступность провайдера, account policy и server-side security находятся вне scope приложения.
Shadowsocks Reborn самостоятельно обновляет подписанный каталог DNSCrypt, не позволяя dnscrypt-proxy разрешать hostnames удалённых sources через bootstrap DNS. Основной resolver — Cloudflare DoH (1.1.1.1, TLS/SNI cloudflare-dns.com), резервный — Google DoH (8.8.8.8, TLS/SNI dns.google); оба HTTPS-соединения DoH открываются через активный локальный SOCKS5 Shadowsocks. После разрешения имени источника загрузка public-resolvers.md и .minisig также идёт через Shadowsocks.
Размер загрузок ограничен, а пара проверяется закреплённым публичным Minisign-ключом DNSCrypt до публикации. Затем dnscrypt-proxy получает только локальный аутентифицированный кэш с urls = [], bootstrap_resolvers = [] и ignore_system_dns = true. Если обновление временно недоступно, может использоваться уже существующий валидный подписанный кэш; при отсутствии валидного кэша операция завершается fail-closed, а предыдущий DNS mode сохраняется.