WEB-558 · Задача · — · web
SEC-041 [pending] Facebook callback допускает отсутствие попытки подключения
Закрыт
P2
ведёт: —
эпик: WEB-515
Суть
UI начинает Facebook flow через /api/social/facebook/auth (src/components/social/ShareToSocialModal.tsx:56). Auth route использует текущий userId; authorize сохраняет случайный nonce в per-user SystemSetting (src/lib/social/providers/facebook.ts:148–157). Но callback отклоняет только существующий непустой state, который не совпал: expectedState?.value && expectedState.value !== state (src/app/api/social/facebook/callback/route.ts:27–33). При отсутствии сохранённой попытки route идёт к provider.handleCallback и optional Instagram sync (:35–43). Session user определяет целевую запись, но начало разрешённого flow не подтверждено. Provider calls/реальные accounts не проверялись, CVSS/severity pending; P2 — приоритет проверки/фикса. Это отдельное условие от корректной strict-mismatch проверки LinkedIn и от client-token SEC-025.
ДЛЯ ТИКЕТА: todo; 2050 social-callback-attempt-and-response-fix, luna, затем независимый sol review flow binding.
KNOWN ISSUES / ТРАБЛШУТИНГ: source-only на 6930; эффект внешнего провайдера и production configuration не доказаны. Не использовать реальные state/code/token.
## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** SEC-041 [pending] Facebook callback допускает отсутствие попытки подключения
- **Текущее состояние:** статус: todo; KNOWN ISSUES / ТРАБЛШУТИНГ: source-only на 6930; эффект внешнего провайдера и production configuration не доказаны. Не использовать реальные state/code/token.
- **Кто работал:**
- нет данных в тикете
- **Ветки/бандлы/отчёты:** нет данных в тикете
- **KNOWN ISSUES / ТРАБЛШУТИНГ:**
- UI начинает Facebook flow через /api/social/facebook/auth (src/components/social/ShareToSocialModal.tsx:56). Auth route использует текущий userId; authorize сохраняет случайный nonce в per-user SystemSetting (src/lib/social/providers/facebook.ts:148–157). Но callback отклоняет только существующий…
- ДЛЯ ТИКЕТА: todo; 2050 social-callback-attempt-and-response-fix, luna, затем независимый sol review flow binding.
- KNOWN ISSUES / ТРАБЛШУТИНГ: source-only на 6930; эффект внешнего провайдера и production configuration не доказаны. Не использовать реальные state/code/token.
- **Эволюция:**
- нет данных в тикете
- **Следующий шаг:** нет данных в тикете
Связи
- связан → WEB-515 — ЭПИК: АУДИТ БЕЗОПАСНОСТИ проекта (Codex gpt-6-astra как security lead) — карта поверхности, threat model, ASVS L2, реестр находок, фиксы с adversarial-приёмкой на Claude
Лента
2026-09-06T00:20:44.929Z · astra-securitycont16-wave-2071-web-558 — 2026-09-06T00:20:44.928828+00:00 / IST=2026-09-06T05:50:44.928832+05:30
CONT16 fan-out: 2071 FIX, gpt-5.6-luna, priority NORMAL; задачи WEB-557, WEB-558.
Complete2050 Facebook attempt and Facebook/Twitter route response slices. Facebook callback:27–33 permits a missing stored attempt before provider/optionalInstagram effects35–45; producer providers/facebook.ts:148–158. Require nonempty supplied state plus exact existing attempt, atomically compare-and-delete key/value before work, no post-effect cleanup. Convert six Facebook and four Twitter fixed destination redirects to absolute URLs through existing trusted base convention; use actual pinned NextResponse. Preserve Twitter provider validation (2070 owns its internals), auth identity, optional Instagram partial-failure behavior and current result codes.
Бриф: /Users/poolpooly/audit/outbox/2071-facebook-attempt-and-social-response-completion-brief.md
SHA256 2ad908f98f6ee6b372e76848738e5d62e8341a938e6340ef493cc1f230270751
Статус: выдан в relay; запуск/результат не подтверждены. Full assigned l113/l113b SHA и prior-output dedupe обязательны. Координатор принимает пересекающиеся изменения и посадку.
2026-09-06T02:56:44.303Z · coordinator[06.09 02:56Z координатор] [2026-09-06T02:56Z координатор] Волна 2071c (A1, luna xhigh, повтор блока 16 с базой 02812b90): VERDICT=GO, commit=8ac58bad. Независимая приёмка 2162-accweb558facebook поставлена на A1 (sol high). Отчёт: A1 /home/ubuntu/waves/FACEBOOK-ATTEMPT-AND-SOCIAL-RESPONSE-COMPLETION-R2-REPORT.md.
2026-09-06T03:52:06.554Z · coordinator[06.09 03:52Z координатор] [2026-09-06T03:52Z координатор] ПРИЁМКА 2162-accweb558facebook (A1, sol high): VERDICT=GO на 8ac58bad. Кандидат l113d (l113c уже в сборке).
2026-09-06T04:06:14.749Z · coordinator[06.09 04:06Z координатор] [2026-09-06T04:06Z координатор] ПРИЁМКА 2169-accweb557redirect (A2, sol high): NO-GO. LinkedIn (6/6 веток) и Twitter (4/4) — ПРИНЯТЫ: helper от canonical origin WEB-075, чужой Host → 403 без Location до auth. Facebook — guard внутри auth() HOC: NextAuth выполняет session/jwt-работу до отказа (order-probe). → Волна 2172-facebookguardorder (A2, luna high) поверх 490194c7.
2026-09-06T04:24:54.240Z · coordinator[06.09 04:24Z координатор] [2026-09-06T04:24Z координатор] GO от авторов, приёмки поставлены: перimeter stream-safe 39af4922 (2167) → 2175 (sol xhigh); Facebook guard-order c926d0f8 (2172) → 2176; мобильный холодный вход 8e2d3671 (2152b GREEN) → 2177; телефония-пакет 5a750755 (2151b) → 2178. NO-GO приёмок: WEB-554 f6a40c8b (2163: отзыв не обновляет открытый клиент, DELETE не идемпотентен, нет адресного события, tsc rc=2) → волна 2180-web554revoke; SIP-лаунчер 929dcf4a (2174: happy path ок, два дефекта — дубликат transport в template не отвергается + второй, см. отчёт) → волна 2179.
2026-09-06T08:32:07.107Z · coordinator[06.09 08:32Z координатор] [2026-09-06T08:31Z координатор] Ревью Astra на текущей базе (M4 sol): WEB-534 GO и WEB-537 GO — дефекты на текущей линии не подтверждены → done; WEB-536 NO-GO → фикс-волна 2221. Блок 17 приёмки: WEB-559 b856b658 GO, WEB-567 877a7160 GO → l113d; WEB-538 df0399da NO-GO (item claim/settlement без fence) → 2223; WEB-541 ebecd7f2 NO-GO (2 нарушения контракта) → 2224. Фиксы по NO-GO ревью GO у авторов → приёмки: WEB-545 c4373797 (2216), WEB-550 819da84e (2217), WEB-552 9d47fdf4 (2218), WEB-553 ba3acc4b (2219), WEB-555 d7e486e9 (2220). A2: WEB-542 доработка 7318e002 GO → приёмка 2215; revive-бюджет v3 1fff536a PASS → приёмка 2222; большой PDF 66e56137 ПРИНЯТ (2202 GO) → l113d; Facebook guard c926d0f8 ПРИНЯТ (2176b GO), конфликтует с линией social в l113d → merge-волна 2225.
2026-09-06T08:50:41.219Z · coordinator[06.09 08:50Z координатор] [2026-09-06T08:50Z координатор] ПРИЁМКА 2214-accroleschains3 (A2, sol xhigh): VERDICT=GO на 475f2872 — multi-hop с остановкой без нового evidence, relevance gate, детерминированная расписка (оба порядка, budget-exhausted). Кандидат l113e (роли: C1-6/C3-1/C3-2). Слияние social callbacks 11148078 (2225 GO) → приёмка 2227. WEB-538 fence 5895c8d0 (2223 GO) → приёмка 2228 (M4).
2026-09-06T08:58:17.089Z · coordinator[06.09 08:58Z координатор] [2026-09-06T08:58Z координатор] ПРИЁМКА 2227-accsocialmerge (A2, sol high): VERDICT=GO на 11148078 (слияние social callbacks поверх l113d-candidate 4c73d845) — на всех трёх callbacks: foreign Host → 403 без Location до auth, allowed → абсолютный 307, атомарный claim попытки. Кандидат l113e (l113d уже в сборке без guard-before-auth для Facebook).
2026-09-06T09:10:02.181Z · coordinator[06.09 09:10Z координатор] [2026-09-06T09:09Z координатор] ПОСАЖЕНО: ПРОД = l113d 4c73d845 (09:03Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×4; миграции применены (184 в репо), hetzbk l113d-4c73d845 + env-pack, Pi standby → l113d). В составе (21 коммит над l113c): большой PDF — персист чанков короткими idempotent-транзакциями (WEB-086/496/467), периметр stream-safe (WEB-495/093), WEB-554 отзыв тетради, WEB-540 translation claim, WEB-543 customer guard, WEB-559 binary adapter, WEB-567 issuer authority, WEB-558 facebook attempt, WEB-491 mobile cold-start, WEB-370 пакет телефонии (репо-часть). Откат = l113c 0390afc9. На проде после посадки: revive PDF cmtkm80jo… → running (персист прошёл 5-с барьер — наблюдаю до done); big-test всё ещё упирается в бюджет (identity v4 — волна 2229).
2026-09-06T10:09:56.194Z · astra-securitycont18-wave-2105-web-558 — 2026-09-06T10:09:56.193986+00:00 / IST=2026-09-06T15:39:56.193991+05:30
CONT18 fan-out: 2105 REVIEW, gpt-5.6-sol, priority NORMAL; задачи WEB-554, WEB-558.
BLOCK18 VERIFICATION PASS for board-done scopes on exact4c73. Parent source/test-presence review is complete; this job supplies focused actual behavior evidence and residuals. It is REVIEW only, not new implementation.
WEB-554 classification=VERIFIED_SOURCE_AND_TEST_PRESENT; mapped=1acacaecb494ff74747933ca8b94a41a53f94893. Source: src/store/sharedProjectionRefresh.ts:54, src/store/sharedProjectionRefresh.ts:175, src/store/useStore.ts:5057, src/hooks/useSharedNotebookRevocation.ts:18. Tests: src/store/__tests__/sharedProjectionRefresh.test.ts:169, src/store/__tests__/sharedProjectionRefresh.test.ts:365. Residual: Scoped/fenced shared cleanup present; actual browser/realtime behavior not rerun, owner/local notebooks preserved.
WEB-558 classification=VERIFIED_SOURCE_AND_TEST_PRESENT; mapped=6d37705a8626b8c12a773b340f36fb296c961876. Source: src/app/api/social/facebook/callback/route.ts:32, src/app/api/social/facebook/callback/route.ts:42, src/app/api/social/facebook/callback/route.ts:58. Tests: src/app/api/social/__tests__/oauth-callbacks.test.ts:217, src/app/api/social/__tests__/oauth-callbacks.test.ts:328. Residual: Exact Facebook attempt present; no live Facebook/Instagram, proof remains source/test-presence.
Select the smallest actual existing tests covering the cited correction and ordinary refusal/success boundary. Do not run broad suites merely to increase counts, do not weaken failing assertions, and do not substitute standalone copied models. Policy-only WEB524/529/535 remains an explicit disposition, not a fictitious patch: validate the stated accepted contract and label stricter future policy separately. WEB528 validates committed floors/lock and historical advisory scope only, not current advisory completeness or exploitability; no network audit/install in this brief. WEB537 consumes2087 supplemental report when available and compares actual4c73 sourceChunkWriter/migration differences; old02812 results alone do not cover the new delta.
Бриф: /Users/poolpooly/audit/outbox/2105-l113d-verify-554-558-brief.md
SHA256 24b3bddfcba25be66c7332338734da759df88d0804b4fb1a1128659938b7f012
Статус: выдан в relay; запуск/результат не подтверждены. Назначенная база 4c73d8451a295af84603b1d20f66f88d5aa82a2e; l113d-line. Проверка текущего кода и prior-output dedupe обязательны. Координатор принимает пересекающиеся изменения и посадку.
2026-09-06T10:15:25.207Z · astra-securityblock18-verdict-web-558 — 2026-09-06T10:15:25.206680+00:00 / IST=2026-09-06T15:45:25.206700+05:30
verified: код + тесты присутствуют на 4c73d8451a295af84603b1d20f66f88d5aa82a2e.
Source: src/app/api/social/facebook/callback/route.ts:32, src/app/api/social/facebook/callback/route.ts:42, src/app/api/social/facebook/callback/route.ts:58
Tests: src/app/api/social/__tests__/oauth-callbacks.test.ts:217, src/app/api/social/__tests__/oauth-callbacks.test.ts:328
Mapping: 6d37705a8626b8c12a773b340f36fb296c961876
Residual: Exact Facebook attempt present; no live Facebook/Instagram, proof remains source/test-presence.
Tests NOT_EXECUTED parent; actual behavior wave(s): 2105
Evidence: /Users/poolpooly/audit/evidence/block18/source-test-hashes.json
Checkpoint: /Users/poolpooly/audit/reports/block18-checkpoint.md
Board status не изменён; source/test presence и policy disposition не равны выполненной runtime-приёмке.
2026-09-06T14:18:20.864Z · astra-securityblock19-l113d-verify-554-558-web-558 — 2026-09-06T14:18:20.863937+00:00 / IST=2026-09-06T19:48:20.863942+05:30
Правила обогащения: WEB-449. ДЛЯ ТИКЕТА / BLOCK19.
Вердикт: GO scoped; current positive behavior preserved.
Причина и текущая дельта: 554focused9/9, Facebook attempt tests GO. sharedProjectionRefresh/hook/tests unchanged; useStore changed in unrelated paths. Facebook outerguard добавлен c61289e2/1626daa0, exactattempt сохранён. Current browser/DB/live не rerun; новыйFIX не установлен.
База независимой source-сверки M1: 4c322c4606a1695fc896ecd6313842d55679b472; root /private/tmp/nc-block19-parent. Исходный header VERDICT=GO сохранён без изменения scope.
KNOWN ISSUES / ТРАБЛШУТИНГ: reportGO ограничен исполненными группами; INPUT-NO-GO не доказывает product failure; current source/hash bridge не заменяет runtime/DB/provider/host acceptance. Проверка: раздел provenance/raw counts исходного отчёта, source-hash-reconciliation.json и актуальный fanout-jobs.json. Лечение/следующий шаг: 554focused9/9, Facebook attempt tests GO. sharedProjectionRefresh/hook/tests unchanged; useStore changed in unrelated paths. Facebook outerguard добавлен c61289e2/1626daa0, exactattempt сохранён. Current browser/DB/live не rerun; новыйFIX не установлен.
КАРТА ДОКУМЕНТОВ: M1 /Users/poolpooly/audit/evidence/block19/intake-originals/CONT18-RELAY-4/L113D-VERIFY-554-558-REPORT.md
SHA256 092e95085cde8e93fbf566489de1049641d5cb14f3598b591598848050e75e4d
M1 /Users/poolpooly/audit/evidence/block19/source-hash-reconciliation.json
M1 /Users/poolpooly/audit/reports/block19-checkpoint.md
M1 /Users/poolpooly/audit/evidence/block19/fanout-jobs.json
Board workflow/чужие поля не менялись. High — срочность сверки закрытия; новая числоваяCVSS не назначалась. Parent/reviewer тестов не запускали; результаты worker report-attested.
2026-09-06T21:37:37.374Z · astra-securityblock22-wave-2185-web-558 — 2026-09-06T21:37:37.373876+00:00 / IST=2026-09-07T03:07:37.373897+05:30
ДЛЯ ТИКЕТА / BLOCK22 release closure. WEB558 Facebook requires recorded exact attempt; optional Instagram degradation intentional.
Бриф /Users/poolpooly/audit/outbox/2185-facebook-attempt-binding-post-l113j-closure-brief.md; SHA256 279f62518621470f027e42b5cdf914710a1e7b0af2a6687a1fa3bd0e894c2c42. MODEL=gpt-5.6-sol, A2 cap11, M4 cap3 без автоматического переноса. WAITING_RELEASE_l113j: не запускать до полного deployed-SHA/artifact/backend receipt. Сейчас reportedprod i18f130938b8d2a8f4376811651ad21beb4e28838; M1 source checkout толькоh.
Три группы: exactrelease/source mapping; live: QA disconnected settings and no-state callback refusal only; no provider token exchange or real integrationmutation.; companion: Local missing/old/current attempt consumes only correct record before provider effect; optional Instagram failure does not undo acceptedFacebook. Distinguish older acceptedcallbacktests from actual deployedhash.
KNOWN ISSUES: sent≠running, code/authorGO≠liveclosure. При отсутствующем fix в j — NOT_DEPLOYED. Никаких paid/provider effects, реальных удалений/отказов сервиса. Existing2455/2450/2460/2462/2458 и старые работы не дублируются. Историческиеanchors src/app/api/social/facebook/callback/route.ts:32; src/app/api/social/facebook/callback/route.ts:42; src/app/api/social/facebook/callback/route.ts:58. Fullreport future /home/ubuntu/waves/BLOCK22-FACEBOOK-ATTEMPT-BINDING-POST-L113J-CLOSURE-REPORT.md. Evidence M1 /Users/poolpooly/audit/evidence/block22/fanout-jobs.json; checkpoint /Users/poolpooly/audit/reports/block22-checkpoint.md. Статус тикета не менялся.
2026-09-07T07:38:24.531Z · astra-securityBLOCK22-RELAY13-WEB-558 — 2026-09-07T07:38:24.530985+00:00 / IST=2026-09-07T13:08:24.531004+05:30
SEC-041 / WEB-558: NO_GO_FULL_CLOSURE_UNVERIFIED. Workflow done сохранён. Текущий m 8f4ba1d92cc15a8b64144674e35cce71fdfba43a подтверждён распиской; родитель не выполнял live.
Полный closure GO не установлен. NO-GO из-за недостающих входов не объявляется новым продуктовым дефектом. Исторический source/companion PASS сохраняется в исходном отчёте.
KNOWN ISSUES / ТРАБЛШУТИНГ
- receipt has no SEC-041/WEB-558 row
- historical/accepted candidates not ancestors as commits
- target runtime and live observation unverified
ДЛЯ ТИКЕТА
No new r3 wave: outside explicitly listed blockers; retain NO-GO/evidence gap for coordinator.
No additional release candidate asserted by this delta.
Полный ledger и parent adjudication: ~/audit/evidence/block22-relay13/ledger46.json; ~/audit/reports/block22-relay13-r3-plan.md.
Reports:
/Users/poolpooly/audit/evidence/block22-relay13/intake-originals/CONT19-RELAY-12/a1/BLOCK22-FACEBOOK-ATTEMPT-BINDING-POST-L113J-CLOSURE-REPORT.md
2026-09-07T11:40:36.857Z · ЭВОЛЮЦИЯ ЗА 12 Ч (гигиена 2609, 11:25Z 07.09)
ХРОНОЛОГИЯ КРУГОВ
- волна 2185 → `46393080dd885f6ff25967f18639075564e12737`, `6d37705a8626b8c12a773b340f36fb296c961876`, `8ac58bad687db8c8d231b5d81ef5b67e4bb1f1e1` → VERDICT=NO-GO — **SEC-041 / WEB-558: NO-GO для полного post-l113j closure.** Причина: exact l113j release core подтверждён, требуемый Facebook exact-attempt contract присутствует в унаследованных source bytes, optional Instagram degradation сохранена, а companion proof пригоден по проверенной byte/runtime эквивалентности. Но coordinator receipt не содержит target mapping, exact candidate commits не являются deployed ancestors, target compiled-runtime bytes не предоставлены, и live QA login завершился 403 до disconnected-status и… Источник: `A1 waves/BLOCK22-FACEBOOK-ATTEMPT-BINDING-POST-L113J-CLOSURE-REPORT.md`.
- Линии посадки: l113j 22:56Z → l113k 00:41Z → l113l 05:30Z → l113m 06:33Z → l113n 07:48Z → l113o 09:35Z → l113p 10:21:43Z. Текущий PROD: l113p `1c850d92876757812eab9ffa7f381bcea95aad86`; общий verify — green по release receipt.
ДЛЯ НУЛЕВОГО АГЕНТА
- Board показывает done, но строгий closure не доказан. Проверка относительно l113p `1c850d92876757812eab9ffa7f381bcea95aad86`: `46393080dd885f6ff25967f18639075564e12737`=предок; `6d37705a8626b8c12a773b340f36fb296c961876`=предок; `8ac58bad687db8c8d231b5d81ef5b67e4bb1f1e1`=объект не предъявлен. Это запись «ЛОЖНО ЗАКРЫТЫЙ»; статус не меняется автоматически.
- Следующий шаг / владелец: Координатор/Astra: закрыть названный в последнем отчёте mapping/runtime/live/landing gate, получить независимый GO по точному кандидату и затем post-QA (либо явно обоснованное code-only n/a).
KNOWN ISSUES / ТРАБЛШУТИНГ
- Дельта без домысла: **SEC-041 / WEB-558: NO-GO для полного post-l113j closure.** Причина: exact l113j release core подтверждён, требуемый Facebook exact-attempt contract присутствует в унаследованных source bytes, optional Instagram degradation сохранена, а companion proof пригоден по проверенной byte/runtime эквивалентности. Но coordinator receipt не содержит target mapping, exact candidate commits не являются deployed ancestors, target compiled-runtime bytes не предоставлены, и live QA login завершился 403 до disconnected-status и… Проверка/причина привязаны к отчётам выше; anchors: `src/app/api/social/facebook/callback/route.ts:34-55`, `src/app/api/social/facebook/callback/route.ts:57-65`, `src/lib/social/providers/facebook.ts:156-166`, `src/app/api/social/__tests__/oauth-callbacks.test.ts:217-272`. Лечение — только указанное в report disposition; отсутствующий live/receipt не объявляется продуктовой регрессией.
ЛОЖНО ЗАКРЫТЫЙ
- Последний полный trail не замкнут: done оставлен без обратного PATCH по прямому правилу owner; это ручная очередь closure.
СВЯЗИ / ИСТОЧНИКИ
- Release: `M4 waves/L113P-RELEASE-RECEIPT.md`; координаторский срез: `M4 waves/OPS-STATUS-HEAD-1120.md`; точные отчёты перечислены в хронологии/KNOWN ISSUES.
- Если сегодняшняя карточка уже содержит более ранний coordinator-комментарий с тем же фактом, эта запись является только дельтой 2609 и не отменяет тот trail.
2026-09-07T12:22:10.007Z · astra-securityRELAY16-R3P-FANOUT — 2026-09-07T12:22:10.006381+00:00 / IST=2026-09-07T17:52:10.006403+05:30
OWNER DECISION RELAY16: closure r3p выдан в пакете2622, ROUTING M4, MODEL gpt-5.5.
Бриф /Users/poolpooly/audit/outbox/2622-social-callback-attempts-r3p-brief.md; SHA256 418cf58029bcc840b77508364629c6c6ed9120b838694d3ca2605d9ad93befdf. Base l113p1c850d92876757812eab9ffa7f381bcea95aad86.
KNOWN ISSUES: ['receipt has no SEC-041/WEB-558 row', 'historical/accepted candidates not ancestors as commits', 'target runtime and live observation unverified']
Следующий gate: 2622 / M4: finish per-ticket exactp mapping, targetreceipt and independent companion; report blockedgroups individually. Issued, not running/GO.
Действие координатора: See current block22-owner-checklist and RELAY-9 execution addendum. Release gate satisfied; host, policy and per-candidate exclusions remain.
ТРАБЛШУТИНГ: три группы на этот тикет — exact accepted/semantic source→runtime mapping, specific target receipt/authorized QA proof, independent inert behavior. Policy accepted != fixed; historical NO-GO != newpdefect. Missinginput возвращать отдельно, без ожиданиявслоте.
ДЛЯ ТИКЕТА: ISSUED_OUTBOX, pickup/run/result пока не подтверждены; workflow не менялся. Таблица и exactmissingbundles: /Users/poolpooly/audit/outbox/CLOSURE-BATCH-PLAN-20260907.md.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-558","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-06T09:10:08.684Z