Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

Zurp

MIT license PRs Welcome Bug Bounty

Meta bug bounty research tools, in Burp Suite and in your coding agent.

Researching a Meta endpoint normally means a different tool, a different login and a different token for every question you have about it. Zurp is where those meet: it annotates the traffic already flowing through your proxy, and exposes the same capabilities to an AI agent over the same APIs and the same token.

Every Meta request and response gets a Meta View tab, showing what the identifiers in it actually name:

The Meta Context tab, resolving a GraphQL operation name to the resolver behind it

ToolWhat it answersIn BurpFor an agent
Meta Contextwhat is this id, URL, doc_id or operation?Meta View tab on every Meta requestmeta-context server
FBDLwhere do I get accounts I am allowed to attack?FBDL tab, {{fbdl.*}} placeholdersfbdl server
CSRF / sprinklewhy won't this captured request replay?automatic on the request pathn/a
SPARTAwhat are the leads to find potentially interesting issues?SPARTA tab, PoCs queued into Organizersparta server

Use one or use all four. Nothing here depends on anything else here, and each works only against your own account's data.

Quick start

Download zurp.jar from the latest release, then in Burp: Extensions → Installed → Add → Extension type Java → zurp.jar.

Open the Zurp tab, paste your researcher token into Settings → Access Token, and browse. That is the whole setup. Everything else has a working default.

Prefer to build it yourself? See building from source. For the agent side, see installing the MCP servers.

Getting access

Every tool here is gated on the same allowlist as FBDL. If you can use FBDL, your existing token works for all of this. If you cannot, every endpoint answers 403. The criteria are at https://www.facebook.com/whitehat/fbdl/.

Mint a token at https://www.facebook.com/whitehat/fbdl/generate_api_token. Tokens last 60 days, and one drives everything: the extension and all three MCP servers.

Mint it while logged in as your enrolled researcher account. A token carries whichever account your browser happens to be logged into, and nothing afterwards tells you which one that was. Mint from the wrong account and every call returns 403 complaining about enrollment, without naming the account it rejected. This is the most common setup problem by a wide margin.

Requirements

  • Burp Suite 2024.7 or newer. The extension parses JSON through burp.api.montoya.utilities.json, which landed in that release.
  • Java 17 to build from source. Burp supplies its own JVM to run the extension.
  • Node 22.19.0 or newer, for the MCP servers only.
  • An MCP client for the agent side: Muse Code, Claude Code, or anything speaking MCP over stdio.

macOS and Linux are what the docs assume. The extension is a jar and the servers are Node, so Windows works too. Only the paths differ.

Examples

Replay a captured request without hunting for a token. Paste into Repeater, swap the token for a placeholder, send:

POST /api/graphql/ HTTP/2
Host: www.facebook.com
Content-Type: application/x-www-form-urlencoded

fb_dtsg={{fb_dtsg}}&jazoest=0&doc_id=9876543210987654&variables={}

Zurp scrapes fb_dtsg and friends out of the responses you browse and substitutes {{fb_dtsg}}, {{lsd}} and {{csrf}} on the way out, keeping the parameters that depend on them consistent, so the request replays instead of being rejected. The store is keyed per host and per logged-in account, which is what makes a two-actor test work: victim cookies in one tab and attacker cookies in another each get their own token instead of overwriting each other's.

This is the one tool with no agent-side equivalent, because it is a property of sitting on the request path rather than something a tool call can do. It is also what lets an agent park a candidate in a named Repeater tab and have it still replay when you come back to verify it, rather than carrying a token that expired twenty minutes ago.

Point a saved request at a test environment you built. After Pin FBDL run… in the editor's context menu, labels from that run resolve on send:

variables={"pageID":"{{fbdl.1234567890123456.PageOne}}","actorID":"{{fbdl.1234567890123456.UserTwo.uid}}"}

Re-run the script when the assets expire, re-pin, and the same saved request works against fresh ids.

Ask your agent instead. Hand a raw capture to Muse Code or Claude Code and let it pull the identifiers out:

Extracted 3 candidates (1 doc_id, 1 url, 1 fbid). 1 named something, 2 matched nothing.

doc_id=9876543210987654  [doc_id]
  graphql  CometGroupsMallQuery

Ten worked FBDL scripts, up to an IDOR boundary setup, are in bug-bounty-research/examples/.

Building from source

The release jar is the easier path. Building it yourself needs a JDK 17 or newer and Gradle:

git clone https://github.com/facebookincubator/Zurp
cd Zurp
gradle jar          # -> build/libs/zurp.jar
gradle test         # optional; touches no network

The Montoya API jar is the only thing on the compile classpath, and deliberately is not bundled: Burp installs the implementation at load time, so a copy inside our jar would shadow Burp's and break the interfaces we implement. Zurp has no other dependencies.

To pick up a rebuild in a running Burp, untick and retick Loaded next to the extension.

The build pins Montoya to the oldest supported release rather than the newest, so the compiler enforces the version floor in Requirements instead of a researcher discovering it as a missing method at runtime.

The MCP servers, from source

cd bug-bounty-research
npm install
npm run build      # tsc -> dist/
npm test

The MCP servers

bug-bounty-research/ is a standalone Node package sharing no code with the Java here, so it installs on its own if you do not run Burp. Each tool is a separate stdio server: dist/meta-context/index.js, dist/sparta/index.js, dist/fbdl/index.js.

Register the ones you want by absolute path. Full per-client instructions, including the several ways a Muse Code config fails silently, are in bug-bounty-research/README.md.

The agent skills in bug-bounty-research/skills/ teach an agent which tool to reach for and which errors are worth retrying.

Documentation

Contributing

Issues and pull requests are welcome. Development process, how to propose a fix, and how to test a change are in CONTRIBUTING.md.

Found a security bug in Meta's products while using this? That goes through the bounty program, not a GitHub issue.

Code of Conduct

Meta has adopted a Code of Conduct we expect project participants to adhere to. Please read the full text so you understand what will and will not be tolerated.

License

Zurp is MIT licensed.

The FBDL server in bug-bounty-research/ is ported from fbdl-mcp by Ads Dawson, ISC licensed.

关于 About

Tools that lower the barrier to security research on Meta's products, for vetted Meta Bug Bounty researchers. Designed to live where researchers work and to be driven by agents.

语言 Languages

Java55.6%
TypeScript44.4%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
1
Total Commits
峰值: 1次/周
Less
More