{"id":13575303,"url":"https://github.com/zema1/watchvuln","last_synced_at":"2025-05-14T13:04:56.245Z","repository":{"id":148335640,"uuid":"618827641","full_name":"zema1/watchvuln","owner":"zema1","description":"一个高价值漏洞采集与推送服务 | Collect valueable vulnerabilities and push them to various services","archived":false,"fork":false,"pushed_at":"2025-03-27T11:47:03.000Z","size":19367,"stargazers_count":1553,"open_issues_count":7,"forks_count":175,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-04-12T13:57:31.559Z","etag":null,"topics":["dingding-bot","lark-bot","vulnerability","vulnerability-analysis","wecom-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zema1.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-03-25T13:23:45.000Z","updated_at":"2025-04-11T06:15:44.000Z","dependencies_parsed_at":"2023-11-07T13:41:06.930Z","dependency_job_id":"4f768fde-0e0c-4db9-9c0d-0ca0d7d97c12","html_url":"https://github.com/zema1/watchvuln","commit_stats":null,"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zema1%2Fwatchvuln","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zema1%2Fwatchvuln/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zema1%2Fwatchvuln/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zema1%2Fwatchvuln/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zema1","download_url":"https://codeload.github.com/zema1/watchvuln/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254149875,"owners_count":22022851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dingding-bot","lark-bot","vulnerability","vulnerability-analysis","wecom-bot"],"created_at":"2024-08-01T15:00:59.827Z","updated_at":"2025-05-14T13:04:56.205Z","avatar_url":"https://github.com/zema1.png","language":"Go","funding_links":[],"categories":["Go","信息搜集"],"sub_categories":[],"readme":"# WatchVuln 高价值漏洞采集与推送\n\n众所周知，CVE 漏洞库中 99% 以上的漏洞只是无现实意义的编号。我想集中精力看下当下需要关注的高价值漏洞有哪些，而不是被各类 RSS\n和公众号的 ~~威胁情报~~ 淹没。 于是写了这个小项目来抓取部分高质量的漏洞信息源然后做推送。 `WatchVuln`意为**监测**\n漏洞更新，同时也表示这些漏洞需要**注意**。\n\n当前抓取了这几个站点的数据:\n\n| 名称                         | 地址                                                                                              | 推送策略                                             |\n|----------------------------|-------------------------------------------------------------------------------------------------|--------------------------------------------------|\n| 阿里云漏洞库                     | https://avd.aliyun.com/high-risk/list                                                           | 等级为高危或严重                                         |\n| 长亭漏洞库                      | https://stack.chaitin.com/vuldb/index                                                           | 等级为高危或严重**并且**标题含中文                              |\n| OSCS开源安全情报预警               | https://www.oscs1024.com/cm                                                                     | 等级为高危或严重**并且**包含 `预警` 标签                         |\n| 奇安信威胁情报中心                  | https://ti.qianxin.com/                                                                         | 等级为高危严重**并且**包含 `奇安信CERT验证` `POC公开` `技术细节公布`标签之一 |\n| 微步在线研究响应中心(公众号)            | https://x.threatbook.com/v5/vulIntelligence                                                     | 等级为高危或严重                                         |\n| 知道创宇Seebug漏洞库              | https://www.seebug.org/                                                                         | 等级为高危或严重                                         |\n| 启明星辰漏洞通告                   | https://www.venustech.com.cn/new_type/aqtg/                                                     | 等级为高危或严重                                         |\n| CISA KEV                   | https://www.cisa.gov/known-exploited-vulnerabilities-catalog                                    | 全部推送                                             |\n| Struts2 Security Bulletins | [Struts2 Security Bulletins](https://cwiki.apache.org/confluence/display/WW/Security+Bulletins) | 等级为高危或严重                                         |\n\n\u003e 所有信息来自网站公开页面, 如果有侵权，请提交 issue, 我会删除相关源。\n\u003e\n\u003e 如果有更好的信息源也可以反馈给我，需要能够响应及时 \u0026 有办法过滤出有价值的漏洞\n\n具体来说，消息的推送有两种情况, 两种情况有内置去重，不会重复推送:\n\n- 新建的漏洞符合推送策略，直接推送,\n- 新建的漏洞不符合推送策略，但漏洞信息被更新后符合了推送策略，也会被推送\n\n![app](./.github/assets/app.jpg)\n\n## 快速使用\n\n支持下列推送方式:\n\n- [钉钉群组机器人](https://open.dingtalk.com/document/robots/custom-robot-access)\n- [微信企业版群组机器人](https://open.work.weixin.qq.com/help2/pc/14931)\n- [飞书群组机器人](https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN)\n- [Telegram Bot](https://core.telegram.org/bots/tutorial)\n- [Server 酱](https://sct.ftqq.com/)\n- [自定义 Bark 服务](https://github.com/Finb/Bark)\n- [自定义 Webhook 服务](./examples/webhook)\n- [pushplus](https://pushplus.plus/)\n- [蓝信](https://developer.lanxin.cn/official/article?id=646ecae03d4e4adb7039c0e4\u0026module=development-help\u0026article_id=646f193b3d4e4adb7039c21c)\n\n### 使用 Docker\n\nDocker 方式推荐使用环境变量来配置服务参数\n\n| 环境变量名                   | 说明                                                                                | 默认值                                               |\n|-------------------------|-----------------------------------------------------------------------------------|---------------------------------------------------|\n| `DB_CONN`               | 数据库链接字符串，详情见 [数据库连接](#数据库连接)                                                      | `sqlite3://vuln_v3.sqlite3`                       |\n| `DINGDING_ACCESS_TOKEN` | 钉钉机器人 url 的 `access_token` 部分                                                     |                                                   |\n| `DINGDING_SECRET`       | 钉钉机器人的加签值 （仅支持加签方式）                                                               |                                                   |\n| `LARK_ACCESS_TOKEN`     | 飞书机器人 url 的 `/open-apis/bot/v2/hook/` 后的部分, 也支持直接指定完整的 url 来访问私有部署的飞书             |                                                   |\n| `LARK_SECRET`           | 飞书机器人的加签值 （仅支持加签方式）                                                               |                                                   |\n| `WECHATWORK_KEY `       | 微信机器人 url 的 `key` 部分                                                              |                                                   |\n| `SERVERCHAN_KEY `       | Server酱的 `SCKEY`                                                                  |                                                   |\n| `WEBHOOK_URL`           | 自定义 webhook 服务的完整 url                                                             |                                                   |\n| `BARK_URL`              | Bark 服务的完整 url, 路径需要包含 DeviceKey                                                  |                                                   |\n| `PUSHPLUS_KEY`          | PushPlus的token                                                                    |                                                   |\n| `LANXIN_DOMAIN`         | 蓝信webhook机器人的域名                                                                   |                                                   |\n| `LANXIN_TOKEN`          | 蓝信webhook机器人的hook token                                                           |                                                   |\n| `LANXIN_SECRET`         | 蓝信webhook机器人的签名                                                                   |                                                   |\n| `TELEGRAM_BOT_TOKEN`    | Telegram Bot Token                                                                |                                                   |\n| `TELEGRAM_CHAT_IDS`     | Telegram Bot 需要发送给的 chat 列表，使用 `,` 分割                                             |                                                   |\n| `SOURCES`               | 启用哪些漏洞信息源，逗号分隔, 可选 `avd`, `ti`, `oscs`, `seebug`,`threatbook`,`struts2`,`chaitin` | `avd,ti,oscs,threatbook,seebug,struts2,venustech` |\n| `INTERVAL`              | 检查周期，支持秒 `60s`, 分钟 `10m`, 小时 `1h`, 最低 `1m`                                        | `30m`                                             |\n| `ENABLE_CVE_FILTER`     | 启用 CVE 过滤，开启后多个数据源的统一 CVE 将只推送一次                                                  | `true`                                            |\n| `NO_FILTER`             | 禁用上述推送过滤策略，所有新发现的漏洞都会被推送                                                          | `false`                                           |\n| `NO_START_MESSAGE`      | 禁用服务启动的提示信息                                                                       | `false`                                           |\n| `WHITELIST_FILE`        | 指定推送漏洞的白名单列表文件, 详情见 [推送内容筛选](#推送内容筛选)                                             |                                                   |\n| `BLACKLIST_FILE`        | 指定推送漏洞的黑名单列表文件, 详情见 [推送内容筛选](#推送内容筛选)                                             |                                                   |\n| `DIFF`                  | 跳过初始化阶段，转而直接检查漏洞更新并推送                                                             |                                                   |\n| `HTTPS_PROXY`           | 给所有请求配置代理, 详情见 [配置代理](#配置代理)                                                      |                                                   |\n| `GO_SKIP_TLS_CHECK`     | 跳过 tls 校验，详情见 [配置代理](#配置代理)                                                       | `false`                                           |\n\n比如使用钉钉机器人\n\n```bash\ndocker run --restart always -d \\\n  -e DINGDING_ACCESS_TOKEN=xxxx \\\n  -e DINGDING_SECRET=xxxx \\\n  -e INTERVAL=30m \\\n  -e ENABLE_CVE_FILTER=true \\\n  zemal/watchvuln:latest\n```\n\n当然，你可以仓靠使用本仓库的 `docker-compose.yaml` 文件，使用 `docker-compose` 来启动容器。\n\n每次更新记得重新拉镜像:\n\n```\ndocker pull zemal/watchvuln:latest\n```\n\n\u003cdetails\u003e\u003csummary\u003e使用飞书机器人\u003c/summary\u003e\n\n```bash\ndocker run --restart always -d \\\n  -e LARK_ACCESS_TOKEN=xxxx \\\n  -e LARK_SECRET=xxxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用企业微信机器人\u003c/summary\u003e\n\n```bash\ndocker run --restart always -d \\\n  -e WECHATWORK_KEY=xxxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用PushPlus\u003c/summary\u003e\n\n```bash\ndocker run --restart always -d \\\n  -e PUSHPLUS_KEY=xxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用蓝信Webhook机器人\u003c/summary\u003e\n\n```bash\ndocker run --restart always -d \\\n  -e LANXIN_DOMAIN=xxx \\\n  -e LANXIN_TOKEN=xxx \\\n  -e LANXIN_SECRET=xxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用Telegram 机器人\u003c/summary\u003e\n\n```bash\ndocker run --restart always -d \\\n  -e TELEGRAM_BOT_TOKEN=xxx \\\n  -e TELEGRAM_CHAT_IDS=1111,2222 \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用自定义 Bark 服务\u003c/summary\u003e\n\n```bash\ndocker run --restart always -d \\\n  -e BARK_URL=http://xxxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用自定义 Webhook 服务\u003c/summary\u003e\n\n通过自定义一个 webhook server，可以方便的接入其他服务, 实现方式可以参考: [example](./examples/webhook)\n\n```bash\ndocker run --restart always -d \\\n  -e WEBHOOK_URL=http://xxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用server酱机器人\u003c/summary\u003e\n\n```bash\ndocker run --restart always -d \\\n  -e SERVERCHAN_KEY=xxxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用多种服务\u003c/summary\u003e\n\n如果配置了多种服务的密钥，那么每个服务都会生效， 比如使用钉钉和企业微信:\n\n```bash\ndocker run --restart always -d \\\n  -e DINGDING_ACCESS_TOKEN=xxxx \\\n  -e DINGDING_SECRET=xxxx \\\n  -e WECHATWORK_KEY=xxxx \\\n  -e INTERVAL=30m \\\n  zemal/watchvuln:latest\n```\n\n\u003c/details\u003e\n\n\n初次运行会在本地建立全量数据库，大约需要 1 分钟，可以使用 `docker logs -f [containerId]` 来查看进度,\n完成后会在群内收到一个提示消息，表示服务已经在正常运行了。\n\n### 使用二进制\n\n前往 Release 下载对应平台的二进制，然后在命令行执行。命令行参数请参考 Docker 环境变量部分的说明，可以一一对应。\n\n```bash\nUSAGE:\n   watchvuln [global options] command [command options] [arguments...]\n\nGLOBAL OPTIONS:\n   [Push Options]\n\n   --bark-url value, --bark value             your bark server url, ex: http://127.0.0.1:1111/DeviceKey\n   --dingding-access-token value, --dt value  webhook access token of dingding bot\n   --dingding-sign-secret value, --ds value   sign secret of dingding bot\n   --lanxin-domain value, --lxd value         your lanxin server url, ex: https://apigw-example.domain\n   --lanxin-hook-token value, --lxt value     lanxin hook token\n   --lanxin-sign-secret value, --lxs value    sign secret of lanxin\n   --lark-access-token value, --lt value      webhook access token/url of lark\n   --lark-sign-secret value, --ls value       sign secret of lark\n   --pushplus-key value, --pk value           send key for push plus\n   --serverchan-key value, --sk value         send key for server chan\n   --telegram-bot-token value, --tgtk value   telegram bot token, ex: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11\n   --telegram-chat-ids value, --tgids value   chat ids want to send on telegram, ex: 123456,4312341,123123\n   --webhook-url value, --webhook value       your webhook server url, ex: http://127.0.0.1:1111/webhook\n   --wechatwork-key value, --wk value         webhook key of wechat work\n\n   [Launch Options]\n\n   --db-conn value, --db value  database connection string (default: \"sqlite3://vuln_v3.sqlite3\")\n   --enable-cve-filter          enable a filter that vulns from multiple sources with same cve id will be sent only once (default: true)\n   --interval value, -i value   checking every [interval], supported format like 30s, 30m, 1h (default: \"30m\")\n   --no-filter, --nf            ignore the valuable filter and push all discovered vulns (default: false)\n   --no-github-search, --ng     don't search github repos and pull requests for every cve vuln (default: false)\n   --no-start-message, --nm     disable the hello message when server starts (default: false)\n   --proxy value, -x value      set request proxy, support socks5://xxx or http(s)://\n   --sources value, -s value    set vuln sources (default: \"avd,nox,oscs,threatbook,seebug,struts2\")\n\n   [Other Options]\n\n   --debug, -d    set log level to debug, print more details (default: false)\n   --help, -h     show help (default: false)\n   --version, -v  print the version (default: false)\n```\n\n在参数中指定相关 Token 即可, 比如使用钉钉机器人\n\n```\n$ ./watchvuln --dt DINGDING_ACCESS_TOKEN --ds DINGDING_SECRET -i 30m\n```\n\n\u003cdetails\u003e\u003csummary\u003e使用飞书机器人\u003c/summary\u003e\n\n```bash\n$ ./watchvuln --lt LARK_ACCESS_TOKEN --ls LARK_SECRET -i 30m\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用企业微信机器人\u003c/summary\u003e\n\n```\n$ ./watchvuln --wk WECHATWORK_KEY -i 30m\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用server酱机器人\u003c/summary\u003e\n\n```\n$ ./watchvuln --sk xxxx -i 30m\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用PushPlus\u003c/summary\u003e\n\n```\n$ ./watchvuln --pk xxxx -i 30m\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用蓝信Webhook机器人\u003c/summary\u003e\n\n```\n$ ./watchvuln --lxd xxxx --lxt xxx --lxs xxx -i 30m\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用Telegram 机器人\u003c/summary\u003e\n\n```\n$ ./watchvuln --tgtk xxxx --tgids 1111,2222 -i 30m\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\u003csummary\u003e使用自定义 Bark 服务\u003c/summary\u003e\n\n```\n$ ./watchvuln --bark http://xxxx -i 30m\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e使用自定义 Webhook 服务\u003c/summary\u003e\n\n通过自定义一个 webhook server，可以方便的接入其他服务, 实现方式可以参考: [example](./examples/webhook)\n\n```\n$ ./watchvuln --webhook http://xxxx -i 30m\n```\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\u003csummary\u003e使用多种服务\u003c/summary\u003e\n\n如果配置了多种服务的密钥，那么每个服务都会生效， 比如使用钉钉和企业微信:\n\n```\n$ ./watchvuln --dt DINGDING_ACCESS_TOKEN --ds DINGDING_SECRET --wk WECHATWORK_KEY -i 30m\n```\n\n\u003c/details\u003e\n\n## 配置文件\n\n进入查看详情 [使用配置文件](CONFIG.md)\n\n## 数据库连接\n\n默认使用 sqlite3 作为数据库，数据库文件为 `vuln_v3.sqlite3`，如果需要使用其他数据库，可以通过 `--db`\n参数或是环境变量 `DB_CONN` 指定连接字符串，当前支持的数据库有:\n\n- `sqlite3://filename`\n- `mysql://user:pass@host:port/dbname`\n- `postgres://user:pass@host:port/dbname`\n\n注意：该项目不做数据向后兼容保证，版本升级可能存在数据不兼容的情况，如果报错需要删库重来。\n\n## 配置代理\n\nwatchvuln 支持配置上游代理来绕过网络限制，支持两种方式:\n\n- 环境变量 `HTTPS_PROXY`\n- 命令行参数 `--proxy`/`-x`\n\n支持 `socks5://xxxx` 或者 `http(s)://xxkx` 两种代理形式。\n\n参数 `-k/--insecure` 或者环境变量 `GO_SKIP_TLS_CHECK=1` 可以禁用 tls 校验，即会设置 `InSecureSkipVerify` 为 `true`\n，在抓包调试时会\n比较有用。\n\n## 推送内容筛选\n\n如果你只想推送某些产品的漏洞，可以通过配置白名单或者黑名单来实现。这两个参数传入的都是一个文件，文件格式为每行一个产品名，比如:\n\n```txt\nApache\n泛微\n```\n\n温馨提示：如果你使用 `Docker` 来运行，可以通过挂载目录的方式将文件映射到容器内，比如:\n\n```bash\necho \"Apache\" \u003e whitelist.txt\n\ndocker run -v $(pwd):/config \\\n  -e WHITELIST_FILE=/config/whitelist.txt \\\n  -e xxxx=xxxxx\n  zemal/watchvuln:latest\n```\n\n### 白名单过滤\n\n通过命令行参数 `-wf` 或者环境变量 `WHITELIST_FILE` 来指定白名单文件。在发现新漏洞时，将检查漏洞的 **标题** 和 **描述**\n是否包含白名单的任意一行，全都不在的将不推送漏洞。\n\n### 黑名单过滤\n\n通过命令行参数 `-bf` 或者环境变量 `BLACKLIST_FILE` 来指定黑名单文件。在发现新漏洞时，将检查漏洞的 **标题** 是否包含黑名单的任意一行，\n包含的将不推送漏洞。为了避免非预期的漏掉推送，黑名单**不会**检查漏洞的 **描述** 是否匹配。\n\n## 常见问题\n\n1. 服务重启后支持增量更新吗\n\n   支持，每次检查会按照一定的策略去增量抓取\n\n2. Docker 拉取镜像提示 `not found`\n\n   你使用的 Docker 版本太老了，不支持新的镜像格式，需要升级一下 Docker\n   版本，参考 [#16](https://github.com/zema1/watchvuln/issues/16)\n\n## 其他\n\n为了减少内卷，该工具在 00:00 到 07:00 间会去 sleep 不会运行, 请确保你的服务器是正确的时间！\n\n扫码加我拉进讨论群，请备注申请理由为：问题反馈与讨论，否则不通过\n\n\u003cimg src=\"https://github.com/user-attachments/assets/362d2079-4cfa-4764-819f-a4aa70580c1d\" width=\"300\" /\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzema1%2Fwatchvuln","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzema1%2Fwatchvuln","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzema1%2Fwatchvuln/lists"}