关于 Stackurity
Stackurity 是面向安全与基础设施团队的开源、可自托管软件清单和升级情报系统。它汇总主机、代码库、容器、云服务与 Kubernetes 中的组件,并关联漏洞、生命周期和修复信息,同时明确标出覆盖缺口。
主要功能
- 01汇总主机、代码库和镜像清单
- 02漏洞与生命周期情报
- 03基于证据的升级建议
- 04覆盖缺口与风险告警
- 05团队修复工作流
适用场景
- 01发现资产中的漏洞或生命周期终止组件
- 02依据暴露面和利用信号排列事件优先级
- 03为受影响组件选择修复版本
- 04跟踪修复进度和覆盖缺口
MCP 相关
Stackurity 在 `/mcp` 提供远程 MCP 服务,供 AI 助手使用。客户端可查询漏洞、优先级、升级目标和修复状态;获准后也可分配或暂缓问题等。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://app.stackurity.dev/mcpclaude mcp add --transport http dev-stackurity-stackurity https://app.stackurity.dev/mcp{"mcpServers":{"dev-stackurity-stackurity":{"type":"http","url":"https://app.stackurity.dev/mcp"}}}在 Cursor 中打开{"servers":{"dev-stackurity-stackurity":{"type":"http","url":"https://app.stackurity.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"dev-stackurity-stackurity":{"type":"http","url":"https://app.stackurity.dev/mcp"}}}{"mcpServers":{"dev-stackurity-stackurity":{"serverUrl":"https://app.stackurity.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Stackurity
开源、可自托管的软件清单与升级情报平台。Stackurity 可发现主机、代码仓库、容器和 SBOM 中的软件,为每个组件保留证据,并清晰展示未检查的内容。
**状态:**目前处于早期发布阶段,仍在积极开发中;请参阅最新版本和更新日志。社区版包含清单、情报、警报与团队工作流、堆栈包、Kubernetes、Jira 和工作区;有关 Pro 和 Enterprise 的新增功能,请参阅下方的已知限制和版本。
当前功能
- **主机:**面向 Linux(dpkg、rpm 和 apk)和 Windows(注册表)的只读、非特权 Agent。在 Linux 上,它还会查找通过包管理器以外方式安装的运行时和服务(例如通过 nvm 安装的 Node.js、下载的数据库二进制文件),并标记需要重启才能运行已修补代码的主机。它还可以读取已部署应用实际安装的库(node_modules、Python 虚拟环境、Composer vendor,以及从 CDN 加载或复制到网站中的前端库),因此每个应用都会在同一个堆栈视图中显示其主机、Web 服务、运行时和代码库。使用
--docker(可选启用)时,它还会读取主机上运行的 Docker 容器所用镜像,包括本地构建的镜像,但不会在容器中运行任何内容(详情)。 - **代码库:**npm、yarn、pnpm、Composer、Poetry、Pipenv、pip(固定版本)、Go 模块、Bundler、NuGet 和 Dart/Flutter pub,包括直接依赖和传递依赖。更多技术以堆栈包的形式提供:由管理员在其资产环境需要时安装的、经过签名并在沙箱中运行的 WebAssembly 读取器,例如 Java(Maven 和 Gradle)和 Rust(Cargo)。扫描在服务器端从 Git 或 CI 中运行,可根据严重性、优先级或已知漏洞利用阈值使流水线失败。锁文件按数据解析,不会执行任何内容。
- **托管云服务:**通过只读插件获取 AWS RDS、Aurora、ElastiCache、EKS、Lambda 和 OpenSearch 的版本,并跟踪其生命周期。
- **Kubernetes:**通过一个命令(Helm chart 或
kubectl apply)连接;该命令会在集群中运行一个轻量级只读报告器,通过 HTTPS 向 Stackurity 推送数据(或使用从 API 服务器拉取数据的插件)。它会映射各工作负载运行的镜像(依据节点拉取的摘要)、集群外部可访问的工作负载(LoadBalancer、NodePort、Ingress、主机网络),以及用于生命周期跟踪的控制平面、kubelet、运行时和节点操作系统版本。运行中的镜像使用内置的 Syft 扫描,暴露情况会纳入风险评分。无法读取的命名空间和无法拉取的镜像会标记为未评估。请参阅 docs/kubernetes.md。 - **插件:**公开、语言无关的插件契约,并提供一致性检查器。请参阅 docs/plugins.md。
- **容器镜像:**通过内置的 Syft,从镜像仓库引用生成清单。无需 Docker 守护进程。
- **SBOM:**导入 CycloneDX 和 SPDX JSON,导出 CycloneDX 1.6。
- **VEX:**导入 OpenVEX 和 CycloneDX VEX(独立文件、嵌入 SBOM,或作为带签名的证明),并按包 URL、镜像摘要或 CPE 匹配组件;只有在安全用户批准,或由绑定到密钥或令牌的来源应用后,
not_affected声明才会隐藏发现项;版本或镜像发生变化时,该声明将不再生效。决策(误报、缓解措施、导入的声明)可导出为 OpenVEX 或 CycloneDX VEX。请参阅 docs/vex.md。 - **漏洞情报:**适用于 npm、Packagist、PyPI、Go、Maven、RubyGems、crates.io、NuGet、Pub、Debian、Ubuntu、Alpine、Rocky、Alma、Red Hat Enterprise Linux、SUSE Linux Enterprise 和 openSUSE Leap 的 OSV 数据,以及 Amazon 为 Amazon Linux 2 和 2023 发布的自有公告(ALAS)。版本会按照各生态系统自身的规则进行比较,因此能正确处理发行版回移补丁。CVSS v3 和 v4 向量在本地评分(v4 与 FIRST 参考计算器的评分方式一致)。不同来源的公告会去重,CISA KEV 会标记已知漏洞利用,FIRST EPSS 会预测漏洞利用可能性;数据每小时增量刷新。
- **版本和生命周期:**获取 npm、Packagist、PyPI、Go 模块、crates.io、RubyGems、NuGet、Maven Central 和 pub.dev 的最新稳定版本(补丁、次要或主要版本,以及已弃用的软件包和已撤回、已撤销或未列出的版本),并从 endoflife.date 获取操作系统、运行时和框架的生命周期终止数据。
- **升级建议:**对于每个存在未解决发现项的已安装组件,提供最低修复版本、建议升级到的版本(同一主要版本线中能修复所有未解决发现项的最新稳定版本,或操作系统软件包对应发行版的修复版本)、是否属于主要版本升级、已撤回的版本和发行线支持情况,并说明原因。建议仅基于已存储的数据生成;缺失的数据会明确报告为缺失。
- **统一清单:**提供稳定的资产标识、冲突检测与合并,以及资产间的关系。每个组件都会记录其来源、时间戳、置信度和证据。
- **全局搜索:**输入 CVE 或公告 ID、带或不带版本号的软件包、主机名、镜像摘要或代码库 URL、团队、发现项标题中的词语或工作区成员,即可跳转到受影响的资产、组件和发现项。
- **覆盖率台账:**不受支持、已跳过、失败、部分覆盖和数据过期的区域会与覆盖正常的区域分开显示,绝不会被视为覆盖正常。
- **基于风险的告警:**可配置 P1–P4 优先级,并说明各项影响因素(KEV、EPSS、暴露情况、生产环境、关键性、修复可用性、置信度);SOS 规则绝不单独依赖严重性;事件会将发现项分组,因此同一个 CVE 出现在 50 台服务器上时只会生成一个告警。docs/risk.md 说明优先级的判定方式、证据缺失时的处理方式,以及评分测试所依据的场景和不变量。
- **团队工作流:**支持确认、分配、风险接受(需要安全角色、填写原因、设置受策略限制的有效期,并已采取缓解措施)和截止日期,并保留完整历史记录。Pro 支持多个团队、按团队路由以及升级处理逾期问题。
- **修复成效:**按优先级统计修复耗时、相对于风险策略的 SLA 合规情况、通过新鲜清单解决的发现项与通过公告数据变更解决的发现项、解决后再次出现的发现项,以及修复成功、失败和回滚情况;始终提供各项比率所依据的数量。
- **证据(Pro):**用于审计和安全问卷的定期补丁管理报告:覆盖率、未解决和逾期发现项、解决耗时、有效例外情况以及副本偏差。
- **AI 助手:**设置
STACKURITY_BASE_URL为服务器的公开https://地址后,将https://<your server>/mcp粘贴到 Claude、ChatGPT 或任何支持远程 MCP 服务的助手中并登录,无需安装任何内容。助手可以查询哪些内容存在漏洞、为何具有该优先级、应升级到哪个版本,以及某项更改是否修复了问题,并提供引用 ID 和来源;如果允许更改,还可以创建项目、添加服务器、分配、暂缓或忽略问题,并再次检查修复情况(docs/ai-assistants.md)。 - **通知:**支持电子邮件、Slack、Microsoft Teams 和带签名的 Webhook:发送少量消息,引导用户前往仪表板(紧急问题立即通知、按资产和修复方案分组通知、每日或每周摘要,以及新服务器首次扫描时发送简短的“已连接”消息);支持按优先级、团队和环境路由,设置免打扰时段、每小时上限、重试,并提供投递日志。馈送、采集器和覆盖率故障也会触发告警。
- **Jira:**在 Jira Cloud 或 Data Center 中为每个事件创建一个问题;随着发现项加入和优先级变化持续更新,事件解决时添加评论并可选择转换状态,并在仪表板中提供链接。
- **受控修复(Pro):**可选启用、受策略范围限制的升级,支持审批关卡、维护窗口、先进行金丝雀发布再分阶段推广、依据新采集的清单和运行状况检查进行验证,以及失败时停止并在软件包管理器支持的情况下尽力回滚。主机逐台注册,并绑定令牌和本地允许列表。代码库会创建 Renovate 拉取请求,以保留代码审查流程。请参阅 docs/remediation.md。
- **工作区:**一个安装实例可供多个组织使用,并通过 PostgreSQL 行级安全和应用本身实现彼此隔离。
- **仪表板、API 和 CLI:**支持基于角色的访问控制(查看者、工程师、安全、管理员、采集器)、API 令牌、完整的审计日志,以及单点登录(Pro)。
快速开始
Stackurity 可自托管:清单和发现结果保留在你自己的服务器上,主机和流水线会向其发送数据。无需允许外部访问你的机器。
如果你不想运行服务器,Stackurity Cloud 可为你运行相同版本,地址为 app.stackurity.dev:注册即可享受 14 天免费试用,无需信用卡,然后选择一个方案。自行托管 Community 版始终免费,无需账户,也没有资产数量限制;以下步骤均不需要 Stackurity Cloud。
有两种运行方式。两种方式都会像生产环境一样保留会话 Cookie Secure 属性:Chrome、Edge 和 Firefox 会将 http://localhost 视为安全来源,因此在自己的机器上试用无需更改任何安全设置。
在自己的机器上试用
1. 运行服务器(Docker Compose):
git clone https://github.com/stackurity/stackurity.git
cd stackurity/deploy
./init-secrets.sh
docker compose up -d # pulls the signed ghcr.io/stackurity/stackurity image; add --build to build from source
docker compose logs stackurity | grep -A2 "one-time token"
在同一台机器上的 Chrome、Edge 或 Firefox 中打开 http://localhost:8080,并使用日志中的令牌创建首个管理员。Safari 不会向 http://localhost 发送 Secure Cookie,因此无法在 Safari 中保持登录状态:请使用其他浏览器;或者,仅用于本地评估,切勿用于生产环境,使用 STACKURITY_PORT=127.0.0.1:8080 STACKURITY_COOKIE_SECURE=false STACKURITY_BASE_URL=http://localhost:8080 docker compose up -d 启动,这样也能让端口不暴露到网络上(原因)。
2. 五分钟内查看运行效果:使用带标签的演示环境:一台安装了过时软件包和生命周期结束运行时的服务器、部署在该服务器上的应用,以及两个代码库。漏洞源同步完成后,就会显示发现结果:
docker compose exec stackurity stackurity admin load-demo # --remove deletes it again
3. 接入自己的环境:
- **服务器:**在 Assets → Add server 中创建安装命令,并在每台 Linux 主机上运行。Agent 以只读、非特权方式运行,并报告操作系统软件包、运行时,以及已部署应用安装的库。
- **代码:**在 Settings → Integrations 下添加代码库,或在 CI 中运行
stackurity scan . --fail-on critical,以阻止包含漏洞的更改。 - **云:**AWS 插件使用只读角色读取托管服务版本;Kubernetes 报告器(在集群中运行)或插件则使用只读服务账户读取集群的工作负载、镜像和暴露情况。
- **人员和工具:**邀请团队成员(或通过 Pro 启用单点登录),将告警发送到 Slack、Teams 或电子邮件,并将 AI 助手连接到
/mcp,并选择所需的组织、项目和角色。
**4. 采取行动:**Fixes 会将发现结果归纳为具体的升级方案,Dashboard 会显示当前需要你处理的事项。使用 Pro 时,可选择启用修复功能,在已纳管的主机上应用经批准的升级,并为代码库创建 Renovate 拉取请求。
生产环境安装
将 Stackurity 放在提供 HTTPS 的反向代理(Caddy、nginx、Traefik)后面,设置 STACKURITY_BASE_URL=https://stackurity.example.com,并保持 STACKURITY_COOKIE_SECURE 为默认值。安装步骤、Kubernetes(Helm)、备份和升级检查清单见 docs/install.md。切勿在其他人可以访问的服务器上设置 STACKURITY_COOKIE_SECURE=false:如果这样设置,服务器日志会发出警告,Platform health 也会显示警告。
有关 TLS、备份、升级、Kubernetes(Helm)、Agent 和插件,请参阅 docs/install.md。docs/compatibility.md 列出了支持的平台及其可评估的内容,docs/verification.md 介绍了各项声明的测试方式,CHANGELOG.md 记录了每个版本的变更。docs/security-audit.md 介绍了威胁模型以及版本签名方式,docs/operations.md 则列出了推荐的告警、对应的操作手册和运维演练。API 说明见 docs/api.md,所有出站连接均列于 docs/network.md。
已知限制
- 多个服务副本可以共用一个数据库,但不能混用不同版本:升级时会先停止所有副本,然后再启动新版本(升级检查清单)。如果数据库已由更新版本迁移,服务将拒绝启动;已在运行的服务则会无法通过
/readyz检查。 - 漏洞匹配涵盖语言包、Debian、Ubuntu(不包括 Pro)、Alpine、Rocky、Alma、RHEL、Oracle Linux、SUSE、openSUSE Leap,以及 Amazon Linux 2 和 2023。CentOS、Fedora 和 Amazon Linux 1 软件包会列入清单,但仍属于待评估范围。
- Red Hat 公告会与各主版本的主流版本线匹配;Extended Update Support(EUS、AUS)版本线不在建模范围内,因此,停留在 EUS 次版本上的主机可能会显示其已通过 EUS 获得的修复。SUSE 的公告数据不提供严重性,因此 SUSE 发现项的严重性会显示为“未知”,并根据其他风险因素确定优先级。
- 只有当主题名称包含版本线时,才会读取 Amazon Linux 2 extras 主题(kernel-5.10、php8.2、postgresql14);其他主题(docker、epel 等)中的软件包仅与核心公告匹配。
- 发行版(latest-version)数据涵盖上述语言包注册表,不涵盖操作系统软件包。Maven Central 不提供发行日期,RubyGems 会隐藏已撤回的版本,因此这两者都不会显示发行信息。生命周期数据涵盖 endoflife.date 跟踪的所有内容。
- 升级建议会从完整的稳定版本列表中选取主版本线中的最新发行版;从本次发行版起,发行版同步会记录这些信息。在某个组件的发行版数据下次刷新(每天一次)之前,只会显示已知发行日期的版本。主版本线由开头的版本号确定,0.x 软件包也适用。
- 重新打开的发现项从开始记录它们的那次升级起计数;更早发生的重新打开不会被记录。
- 在软件包管理器之外发现的运行时只会进行生命周期(停止支持)跟踪,不会匹配漏洞。
- 当上游已停止支持的发行版软件包(例如 Ubuntu 22.04 上的 nginx 1.18)所在的发行版仍受支持时,不会产生停止支持发现项。Agent 不会记录软件包来自哪个仓库:Ondřej Surý 的 PHP 仓库、nginx.org、NodeSource、PGDG、Remi 和 MySQL 的 APT 仓库中的构建版本会根据其版本识别,并保留上游日期;其他第三方构建则视为发行版自带软件包。Ubuntu
universe软件包只能通过 Ubuntu Pro 获得安全修复,因此不会与main区分(详情)。 - Java 需要 Java stack pack;仅凭
pom.xml只能发现直接依赖项。Windows 热修复和 Microsoft Store 应用会报告为不受支持的覆盖范围。 - 单点登录(OpenID Connect 或 SAML)允许用户加入每个安装实例中的一个工作区;不支持 SAML 单点注销。
- Kubernetes 暴露检测涵盖 Services、Ingresses 和主机网络,不涵盖 Gateway API 路由或服务网格。扫描运行中的镜像时不会使用注册表凭据,因此使用拉取密钥的镜像会显示为覆盖范围扫描失败,除非将其添加为容器镜像集成。Kubernetes CVE 不会进行匹配(仅进行生命周期跟踪)。
- 修复适用于 Linux 软件包(apt、dnf、yum、zypper、apk),也适用于通过 Renovate 管理的代码仓库。在 rpm 系统上,不会自动升级以多个版本并存方式安装的内核及其他软件包。
版本
Community 免费提供,功能完整,可用于查找问题并确定修复优先级。Pro 增加自动修复、多团队工作流、证据报告和单点登录;Enterprise 则增加企业技术包。docs/editions.md 提供了包含限制和前提条件的完整对照表;许可证信息请参阅版本与许可证。
原则
- 可自托管,无需供应商账户,也不收集遥测数据。项目唯一的自动请求是检查是否有新版本:匿名读取公开的版本发布列表,不会发送任何关于你的信息,在本地进行比对,并可通过
STACKURITY_UPDATE_CHECK=off关闭。仪表板中的发送反馈只会在用户按下发送时发送其填写的内容;设置STACKURITY_FEEDBACK_URL=可将其关闭。 - 每条发现都附有来源、时间戳和可信度。
- 缺失或过时的数据会标记为缺失或过时,绝不会被视为正常。
- 刷新威胁情报绝不会更改你的软件。任何更改都需要明确的策略。
试点与报告错误结果
docs/pilot.md 介绍了为期两到四周的试点,可托管,也可部署在自己的服务器上。如果 Stackurity 报告了不适用的内容、遗漏了已知漏洞,或无法检查你需要检查的内容,请使用问题表单;经确认的错误发现和遗漏发现会成为永久测试用例。
贡献与安全
请参阅 CONTRIBUTING.md 和 SECURITY.md。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。