fix(security): защита CGI агента, права конфига и захват лока

- агентский CGI: /diagnose мог удалять nft-таблицы, переписывать resolv.conf
  и перезапускать sing-box с любого устройства LAN без токена; bearer-токен
  теперь передаётся через окружение вместо argv (виден в ps), тело запроса
  ограничено 64KB до чтения, wildcard Access-Control-Allow-Origin убран -
  произвольные сайты больше не могут читать состояние роутера кросс-доменно
  (включая DNS rebinding)
- agent_api: сравнение токена за константное время
- uci/migration: /etc/config/tachyon хранит Telegram bot token и ссылки на
  подписки; UCI не сохраняет 0600 при коммитах, поэтому режим ужесточается
  после каждого коммита этого конфига и после миграций
- build.yml: убран NODE_TLS_REJECT_UNAUTHORIZED=0 из шагов публикации релиза -
  проверка сертификатов не должна отключаться на раннере, заливающем релизы
- initd/state: устранено окно TOCTOU при захвате устаревшего reload-лока:
  два ожидающих могли оба выполнить rm+rmdir+mkdir и каждый считал лок своим;
  захват теперь атомарным переименованием, которое выигрывает ровно один
  претендент
This commit is contained in:
Dushnilin
2026-08-21 19:19:40 +03:00
parent 8996790f25
commit 300ad50417
7 changed files with 106 additions and 26 deletions
-4
View File
@@ -90,8 +90,6 @@ jobs:
- name: Release on tag push
if: ${{ github.event_name == 'push' }}
uses: softprops/action-gh-release@v2.4.0
env:
NODE_TLS_REJECT_UNAUTHORIZED: "0"
with:
files: ./filtered-bin/release/*
tag_name: ${{ github.ref_name }}
@@ -106,8 +104,6 @@ jobs:
- name: Release on workflow dispatch
if: ${{ github.event_name == 'workflow_dispatch' }}
uses: softprops/action-gh-release@v2.4.0
env:
NODE_TLS_REJECT_UNAUTHORIZED: "0"
with:
files: ./filtered-bin/release/*
tag_name: ${{ needs.preparation.outputs.version }}