Commit Graph
120 Commits
Author SHA1 Message Date
RuoJi6 459a484237 Merge pull request #120 from RuoJi6/codex/task-global-assets
feat: add opt-in global asset sharing per task
2026-11-05 16:37:07 +08:00
ji ruo 080a46eb2d feat: make task global asset sharing opt-in 2026-11-05 16:27:44 +08:00
ji ruo 4868b1816f fix: persist custom egress IP probe service (#118) 2026-11-05 16:00:07 +08:00
ji ruo f053931a1d fix: require Basic Auth for health checks 2026-11-03 14:56:39 +08:00
ji ruo 5203176364 fix: remove application fingerprints from public responses 2026-11-03 14:48:41 +08:00
ji ruo 7140d14a17 feat: use DeepSeek Search API for web search 2026-11-03 14:07:32 +08:00
ji ruo 4b037bf5b0 fix: clean up proxy settings and empty pool handling 2026-11-02 17:57:19 +08:00
RuoJi6 05dd5b40e8 Merge pull request #107 from RuoJi6/feat/proxy-pool
feat: 全局代理池(健康检查、定时/失效轮换、热切换、脱敏)— Depends on #106
2026-11-02 15:45:28 +08:00
RuoJi6 de6a0fa125 feat: 代理异常暂停与自动重连恢复
Proxy failure pause, timed reconnect, and guarded auto-resume.
2026-10-31 15:54:41 +08:00
ji ruo 542d7e9ca6 fix: preserve UTF-8 filenames for exports 2026-10-30 15:06:37 +08:00
RuoJi6 5366160a5d feat: add container resource monitoring 2026-10-29 10:28:40 -07:00
ji ruo 6656d73b56 feat: add finding date range filter 2026-10-29 22:48:08 +08:00
ji ruo e5c0721e4d fix: stabilize coverage zoom and reporter generation 2026-10-29 10:35:21 +08:00
ji ruo 7946869762 feat: add task traffic history and report recovery 2026-10-29 10:18:32 +08:00
ji ruo 21646d5d29 feat: separate topology mapping from asset graph 2026-10-28 23:19:53 +08:00
ji ruo 14ebf44362 fix: restore topology view and mapping progress state 2026-10-28 21:10:43 +08:00
ji ruo d51bf259e4 fix: place topology nodes by zone and show mapping progress 2026-10-28 21:01:00 +08:00
ji ruo fb6942f2b2 fix: align asset coverage zones and remapping chat 2026-10-28 19:23:13 +08:00
RuoJi6 d6ce7fc8bb Merge pull request #61 from zabcxky-123/codex/fix-findings-page-size
fix(web): 修复 Findings 列表每页数量固定为 20
2026-10-27 00:44:16 -07:00
RuoJi6 be65ab4425 Merge pull request #59 from zabcxky-123/codex/fix-task-findings-time-sort
fix(web): 恢复项目发现页按时间排序
2026-10-27 00:43:51 -07:00
zabcxky-123 1aeaf57734 fix(web): allow changing findings page size 2026-10-27 14:51:10 +08:00
zabcxky-123 80316252b8 fix(web): restore chronological sorting in task findings 2026-10-27 14:25:36 +08:00
shinypolaris 5feddf296d feat: 全局代理支持连通性测试与出口 IP 显示 2026-10-27 00:01:23 +08:00
RuoJi6 3a4c66d41f Merge pull request #48 from RuoJi6/feat/finding-dedup-1-2-3
feat(findings): 降低重复确认噪音——分组疑似重复建议、候选打分排序、放宽归并验收(方案1+2+3)
2026-10-25 18:37:16 -07:00
RuoJi6 e03bd5c244 Merge pull request #44 from RuoJi6/feat/notes-and-worker-count
feat: 任务/模板备注展示与 Worker 运行数量配置
2026-10-25 18:29:16 -07:00
RuoJi6 1847b8adb1 feat: 发现页新增类似 Burp Repeater 的请求重放功能(Codex 重写)(#42)
Code authored by Codex CLI (gpt-6.1-sol/gpt-6-astra/gpt-6-sol/gpt-5.6-sol sessions, final: gpt-6-astra).
2026-10-24 22:26:22 +08:00
RuoJi6 09e90b4170 feat(findings): grouped duplicate suggestions, ranked candidates, relaxed merged acceptance (Codex rewrite)
Authored entirely by Codex CLI (codex exec, reasoning effort high), one session
resumed across capacity fallbacks:
- gpt-6.1-sol (schema + initial db work, stopped at capacity)
- gpt-6-astra (db/server/agent/frontend, stopped at capacity)
- gpt-6-sol (remaining items, tests, fixes; stopped at capacity after final checks)

Schemes 1+2+3: prompt/acceptance (2..20, evidenced differences justify
independent, merged no longer blocked by unified report), group suggestions with
member table, superset reuse/subset superseded, veto-aware reject/exclusion,
anchor re-anchoring trigger, sweep after merge/reject/remove, frontend group card
with stale-response guard, candidate scoring with tier/hit_reasons/strong_total.
2026-10-24 21:55:45 +08:00
RuoJi6 a1dc362bae feat: 任务/模板备注展示与 Worker 运行数量配置(Codex gpt-6-astra 重写) 2026-10-24 21:46:03 +08:00
RuoJi6 f9cf38c16c revert: 回退手写的 Repeater 实现,准备由 Codex 按新规则重写 (#42) 2026-10-24 21:17:55 +08:00
RuoJi6 ba3025d04f chore: 还原 PR #44 手写实现,准备由 Codex 按新规则重写 2026-10-24 21:17:17 +08:00
RuoJi6 b0d6ad5d76 revert(findings): reset dedup files to origin/main before Codex rewrite
Pure git restore (git checkout origin/main -- <files>) so the scheme 1+2+3
implementation can be re-authored entirely by Codex. No hand-written code.
2026-10-24 21:09:20 +08:00
RuoJi6 00ec84d14e feat(findings): reduce duplicate-confirmation noise with grouped suggestions and ranked candidates
- Prompt: evidenced endpoint/handler/param differences justify independent; suggest only with concrete shared points
- Review acceptance: merged no longer blocked by unified report
- Suggestions: 2..N member groups, one-click group confirm with per-member exclusion, related cards cleared
- Candidates: score/tier/hit_reasons ranking, low-score kept paginated
2026-10-24 20:01:37 +08:00
RuoJi6 341caa5e1f feat: 发现页新增类似 Burp Repeater 的请求重放功能 (#42)
在发现详情的关联流量区提供 Repeater:可从流量证据一键预填,或空白编辑
方法/URL/头/体后由服务端代发请求并展示原始响应,便于人工验证与报告撰写。

- POST /api/repeater/send:复用 recording/global 代理出口
- 直连路径拨号层拦截环回/链路本地/元数据;字面敏感 IP 在 URL 预检拒绝
- 会话内历史(前端内存);跨主机重定向拒绝
2026-10-23 19:22:51 +08:00
RuoJi6 45d4e4e67b feat: 任务/模板备注展示与 Worker 运行数量配置
- 新建任务可填写备注;详情页头部展示备注(列表原有 RemarkEditor 保留)
- 任务模板支持备注与 Worker 数量,应用/另存为模板时同步带入
- 新建任务高级设置与模板均可单独设置 Worker 运行数量(0=回落全局默认)
- schema/API/引擎贯通:tasks.worker_count、task_templates.remark/worker_count
2026-10-23 19:01:21 +08:00
ji ruo 851e3f99ed feat: add optional credential processing with dependent switches and traffic evidence 2026-10-20 13:01:03 +08:00
ji ruo d70dd15e11 feat: add optional task intelligence recording and views 2026-10-20 11:16:04 +08:00
ji ruo de7a668b32 feat: align list editors with name hover actions 2026-10-19 09:58:32 +08:00
ji ruo 316889f76a feat: add inline remarks for tasks and schedules 2026-10-19 09:17:59 +08:00
ji ruo 6a3d39e969 feat: add optional proxy for online updates 2026-10-15 15:44:55 +08:00
ji ruo 2f2b78cc78 feat: search approval history by content and date 2026-10-12 12:38:31 +08:00
ji ruo 8067f3286b 修复计划任务立即运行并区分状态颜色 2026-10-10 08:45:06 +08:00
ji ruo 98321d8262 支持计划任务日期范围 2026-10-09 23:50:05 +08:00
ji ruo 3254c90a03 新增日历式计划任务 2026-10-09 23:05:44 +08:00
ji ruo ada09f6c1a fix(ui): restore original controls and limit folders to merged findings 2026-10-09 13:12:54 +08:00
RuoJi6 e77c3ae9a3 Merge pull request #2 from RuoJi6/codex/finding-folders
feat(findings): 同一漏洞重复上报归并与文件夹展示
2026-10-09 11:07:16 +08:00
ji ruo 24d4726aee feat(findings): consolidate duplicate reports into expandable cases 2026-10-09 10:43:53 +08:00
ji ruo 04c8c54ff8 feat(auth): add optional HTTP Basic Auth access gate 2026-10-09 10:12:27 +08:00
Autumn-27 86729b65dc feat(intercept): 模型兜底审批单独计量 token 并在配置页展示
兜底审批(LLM judge)调模型判定漏网命令,其 token 消耗此前无法单独查看:
usage 行要么无 worker 归属、要么被并进复用的模型 profile 桶里。

- llmrec 增加 WithWorker 上下文覆盖,reviewer 调用前标注 worker='judge',
  让审批调用的计量行可被单独筛出(复用现有 llm_usage.worker 列,无需迁移)。
- db.JudgeUsageStats 返回累计总量 + 近 N 天每日序列(WHERE worker='judge')。
- 新增 GET /api/intercept/judge/usage。
- 配置页「模型兜底审批」开关下方新增用量卡片:调用次数 / 输入 / 输出 /
  缓存读写 五项统计 + 近 30 天每日消耗迷你柱图 + 刷新。
2026-10-04 02:43:26 -04:00
Autumn-27 e2c8a23a98 fix(web): SSE 活动流默认同源,修复反代部署连不上 :8787
sseUrl() 原先无条件把 SSE 地址拼成 ${hostname}:8787,连生产静态导出
也带这个硬编码。反代到 443 的部署里页面从 https://域名/ 加载,SSE 却被
指向 https://域名:8787/...,而 8787 未对公网开放,导致活动流连不上、反复重连。

改为用 NODE_ENV 区分:生产默认同源(相对路径),仅 next dev 保留 :8787
以绕过 Next.js /api 反代对 SSE 的缓冲。NEXT_PUBLIC_SSE_BASE 覆盖口保留。
验证:NEXT_EXPORT=1 next build 后生产包里 :8787 分支已被 tree-shake。

补充 README 反向代理部署文档(同源说明 + nginx 关缓冲配置)。

Closes #169
2026-10-02 20:10:08 -04:00
luckoneandClaude Code f3fb37f70d feat(notify): 漏洞发现支持推送到钉钉/飞书/企业微信等六种渠道
新增「系统 → 通知推送」页,把扫描发现的漏洞推送到钉钉、飞书、企业微信、
通用 Webhook、Telegram、邮件。同一类型可配任意多个机器人实例,每个实例独立
设启停、限流与过滤规则(最低级别 / 任务资产范围 / 漏洞类型关键词 / 是否接收
处置状态变更)。推送时机分实时与汇总两种模式,「高危实时、其余汇总」建两个
渠道即可表达,策略不写死在代码里。带投递历史与失败重发。

三个关键设计:

1. 写漏洞的事务只做一次盲 INSERT。notification_events 由 RecordFindingTx
   在同一事务内写入,保证「漏洞落库」与「推送任务存在」原子一致;这条 INSERT
   刻意不读渠道表、不跑用户的过滤规则,否则一条配错的过滤条件就能污染甚至
   中止事务,让高危漏洞存不进库。为把失败隔离在这一条语句上(PostgreSQL 中
   事务内任一语句报错会让整个事务作废、连 COMMIT 都失败),它被 SAVEPOINT
   包住,失败时只记日志。

2. 投递用租约领取而非长事务。FOR UPDATE SKIP LOCKED 领取后把行置为 sending、
   把 next_attempt_at 推到未来作为租约,提交后再做网络投递,因此投递期间不
   持有数据库锁;崩溃留下的 sending 行会被下一轮重新领取,自愈且不会无限重试。

3. 限流不消耗重试预算。先按渠道令牌桶算出本轮还能发几条,再按这个数量领取;
   顺序反过来会让被限流挡下的投递白计一次尝试,三次预算被等待耗光后落入失败。

审计并修复的四个问题:

- 推送凭据经错误信息外泄:http.Client.Do 返回的 *url.Error 会把完整 URL 打进
  错误文本,而钉钉 access_token、企业微信 key、飞书 hook id、Telegram
  /bot<token>/ 都就在 URL 里。该串流入 last_error(明文落库)、投递历史接口
  (绕过渠道掩码)、服务端日志与前端错误提示。现统一脱敏为 scheme://host
  + 底层原因,并拒绝跨主机重定向。
- 最低级别门槛打错字会让过滤器静默失效:未知级别序数为 0,判定退化成
  rank >= 0 恒真,用户以为限制「仅高危」实际全推。现于写入路径校验取值。
- 汇总批次无上限:一次领取把全部待发行读进内存、消息被渠道长度上限截掉大半
  且静默丢失。现单批上限 500 条,超出部分留库成为下一批。
- 邮件渠道把 SMTP 4xx(灰名单等临时失败)判成永久失败,导致这类最该重试的
  场景从不重试。现按应答码首位区分 4xx/5xx。

测试:notify 包 82% 覆盖(含用自建最小 SMTP 服务器驱动的完整邮件协议会话、
两种签名算法对 OpenSSL 基准值的比对、UTF-8 边界截断、以及模板能力边界的
反射断言);db 与 server 侧共 29 个用例跑真实 PostgreSQL,其中端到端用例
真发 HTTP 到假接收端并断言消息内容与投递状态。

Co-Authored-By: Claude Code <[email protected]>
2026-09-30 16:25:06 +08:00