Repository navigation
feat(skills): add CyberChef MCP tooling skill and documentation #1368
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
noor202401938-netizen
wants to merge
5
commits into
usestrix:main
Choose a base branch
from
noor202401938-netizen:feat/cyberchef-mcp-skill
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 4 commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
73d160a
feat(skills): add CyberChef MCP tooling skill and documentation
noor202401938-netizen 9c64d27
docs: update cyberchef mcp package to @noorfatima123456/cyber-chef-mcp
noor202401938-netizen b851572
fix(skills): use call_mcp dispatch interface, calibrate entropy thres…
noor202401938-netizen d06cb9c
docs(cyberchef): correct operation count to 28 core deterministic ope…
noor202401938-netizen 1fb9278
fix(skills): add raw-byte entropy workflow and in-engine bake chaining
noor202401938-netizen File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,143 @@ | ||
| --- | ||
| name: cyberchef | ||
| description: Multi-layer payload deobfuscation, cryptographic decoding, heuristic recipe detection (magic), and entropy analysis via CyberChef MCP. | ||
| --- | ||
|
|
||
| # CyberChef MCP Tooling Playbook | ||
|
|
||
| Official resources: | ||
| - https://github.com/gchq/CyberChef | ||
| - https://github.com/noor202401938-netizen/cyber-chef-mcp | ||
| - https://gchq.github.io/CyberChef/ | ||
| - https://modelcontextprotocol.io | ||
|
|
||
| CyberChef MCP provides 28 core data transformation, cryptographic, and forensic operations with zero external dependencies. Connected via the Model Context Protocol (MCP) server `cyberchef`, it enables Strix agents to autonomously analyze, deobfuscate, unpack, and verify encoded exploit payloads, authorization tokens, and obfuscated attack vectors with deterministic sub-millisecond execution. | ||
|
|
||
| ## MCP Discovery & Dispatch Workflow | ||
|
|
||
| In Strix, agents interact with external MCP servers through the standard generic-dispatch tools: | ||
| 1. **Discover Connection**: Call `list_mcps()` to verify that the `cyberchef` connection is active. | ||
| 2. **Search Tools**: Call `search_mcp_tools(connection="cyberchef", query="magic")` to locate matching tool names. | ||
| 3. **Inspect Schema**: Call `get_mcp_tool_schema(connection="cyberchef", tool="cyberchef_magic")` to review argument parameters. | ||
| 4. **Dispatch Call**: Call `call_mcp(connection="cyberchef", tool="<tool_name>", arguments={...})` to execute the operation. | ||
|
|
||
| ## High-Signal CyberChef Tools | ||
|
|
||
| When connected to `cyberchef`, the following tools are available on the connection: | ||
|
|
||
| - `cyberchef_magic`: Run heuristic detection across known encodings, ciphers, and hash formats. Returns recommended deobfuscation recipes and confidence scores. | ||
| - `cyberchef_bake`: Execute sequential operation chains (e.g. `[{"op": "From Base64"}, {"op": "URL Decode"}]`). | ||
| - `cyberchef_from_base64`: Decode standard or URL-safe Base64 strings. | ||
| - `cyberchef_to_base64`: Encode plaintext into Base64 / URL-safe Base64. | ||
| - `cyberchef_from_hex`: Convert hexadecimal sequences to text (supports `None`, `Space`, `0x`, `Comma` delimiters). | ||
| - `cyberchef_url_decode`: Decode single or multi-round percent-encoded parameters. | ||
| - `cyberchef_rot13`: Rotate characters by offset (default 13, Caesar cipher support). | ||
| - `cyberchef_xor`: Decrypt or apply bitwise XOR with secret key. | ||
| - `cyberchef_jwt_decode`: Parse and inspect header, claims, alg, and signatures of JSON Web Tokens. | ||
| - `cyberchef_entropy`: Calculate Shannon entropy to distinguish plaintext, compressed data, and encrypted or packed payloads. | ||
| - `cyberchef_defang_url`: Defang malicious or suspicious indicators (`hxxps://target[.]com`) for safe reporting. | ||
| - `cyberchef_extract_entities`: Extract URLs, IP addresses, and email addresses from raw logs or memory strings. | ||
|
|
||
| ## Agent-Safe Baseline for Automation | ||
|
|
||
| ### 1. Heuristic First (`cyberchef_magic`) | ||
| Always run `cyberchef_magic` via `call_mcp` on unknown high-entropy or encoded strings before guessing transformations: | ||
| ```json | ||
| { | ||
| "tool": "call_mcp", | ||
| "arguments": { | ||
| "connection": "cyberchef", | ||
| "tool": "cyberchef_magic", | ||
| "arguments": { | ||
| "input": "ZXlKaGJHY2lPaUpTVXpVbkxh..." | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ### 2. Sequential Multi-Layer Deobfuscation (`cyberchef_bake`) | ||
| For payloads with layered obfuscation (e.g. Hex inside Base64 inside URL-encoded query params): | ||
| ```json | ||
| { | ||
| "tool": "call_mcp", | ||
| "arguments": { | ||
| "connection": "cyberchef", | ||
| "tool": "cyberchef_bake", | ||
| "arguments": { | ||
| "input": "%34%38%36%35%36%63%36%63%36%66", | ||
| "recipe": [ | ||
| { "op": "URL Decode" }, | ||
| { "op": "From Hex", "args": ["None"] } | ||
| ] | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ### 3. Entropy Assessment & Encoding Representation Calibration | ||
| When evaluating whether a payload or parameter is encrypted, packed shellcode, or benign text, evaluate Shannon entropy through `call_mcp`: | ||
| ```json | ||
| { | ||
| "tool": "call_mcp", | ||
| "arguments": { | ||
| "connection": "cyberchef", | ||
| "tool": "cyberchef_entropy", | ||
| "arguments": { | ||
| "input": "01a2fe89cb994821a0d8e4..." | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| > [!IMPORTANT] | ||
| > **Calibrate entropy thresholds by input encoding representation:** | ||
| > Shannon entropy measures bits of information per character. The theoretical maximum is strictly bounded by the alphabet size ($\log_2(N)$): | ||
| > - **Hex Strings (16 characters, max 4.0 bits/char)**: | ||
| > - *Plain text / formatted Hex*: ~2.5 – 3.2 | ||
| > - *High-entropy ciphertext / encrypted payload*: **3.8 – 4.0** (Cannot exceed 4.0!) | ||
| > - *Warning*: Do not misclassify hex ciphertext scoring ~3.9 as low-entropy content. | ||
| > - **Base64 Strings (64 characters, max 6.0 bits/char)**: | ||
| > - *Plain text Base64*: ~3.8 – 4.5 | ||
| > - *High-entropy ciphertext / packed data*: **5.7 – 6.0** (Cannot exceed 6.0!) | ||
| > - **Raw Binary / Decoded Byte Streams (256 values, max 8.0 bits/byte)**: | ||
| > - *Plain text / uncompressed source code*: < 4.5 | ||
| > - *Compressed archives / packed code / encrypted shellcode*: > 7.2 | ||
| > | ||
| > **Best Practice**: Decode encoded representations (Hex, Base64) to raw bytes via `cyberchef_from_hex` or `cyberchef_from_base64` before evaluating raw Shannon entropy. | ||
|
noor202401938-netizen marked this conversation as resolved.
Outdated
|
||
|
|
||
| ## Common Security Analysis Patterns | ||
|
|
||
| ### Pattern 1: Nested WAF Bypass / Obfuscated Injection Vector | ||
| When target web applications accept encoded input in parameters or cookies: | ||
| 1. Extract candidate parameter from HTTP request or response. | ||
| 2. Call `call_mcp(connection="cyberchef", tool="cyberchef_magic", arguments={"input": candidate})` to determine layers. | ||
| 3. Call `call_mcp(connection="cyberchef", tool="cyberchef_bake", arguments={"input": candidate, "recipe": [...]})` with the suggested pipeline to recover the plaintext injection string. | ||
| 4. Verify whether the underlying query contains unsanitized SQLi (`UNION SELECT`), XSS, or SSRF vectors. | ||
|
|
||
| ### Pattern 2: JWT Security Inspection | ||
| When encountering `Authorization: Bearer <token>` or session tokens: | ||
| 1. Call `call_mcp(connection="cyberchef", tool="cyberchef_jwt_decode", arguments={"token": token})`. | ||
| 2. Inspect the header: check for `alg: "none"`, `alg: "HS256"` with potential asymmetric public key confusion, or empty signatures. | ||
| 3. Inspect claims: verify expiry timestamps (`exp`), issuer (`iss`), role/privilege elevations, and user identities. | ||
|
|
||
| ### Pattern 3: XOR Obfuscation Recovery | ||
| When inspecting hardcoded binary strings, PowerShell scripts, or obfuscated malware droppers: | ||
| 1. Identify probable key length or common plaintext prefix (e.g., `MZ`, `http`, `function`). | ||
| 2. Run `call_mcp(connection="cyberchef", tool="cyberchef_xor", arguments={"input": data, "key": candidate_key})` iterating candidate keys to extract underlying C2 endpoints or script payloads. | ||
|
|
||
| ## Critical Correctness Rules | ||
|
|
||
| - **Use `call_mcp` Dispatch**: Never attempt to call CyberChef tools directly as top-level agent tools. Always dispatch through `call_mcp(connection="cyberchef", tool="...", arguments={...})`. | ||
| - **Do Not Guess Encodings**: If a string contains `=, %, 0x` or unexpected symbols, run `cyberchef_magic` first rather than blindly applying base64 or URL decoding. | ||
| - **Preserve Raw Inputs**: Keep the original obfuscated string in agent memory/notes alongside the decoded output for accurate proof-of-concept (PoC) reporting. | ||
| - **Fail-Safe Fallback**: If an operation fails during `cyberchef_bake`, isolate the failing recipe step and execute individual tools (`cyberchef_from_base64`, `cyberchef_url_decode`) sequentially via `call_mcp`. | ||
| - **Safe Defanging**: Always run `cyberchef_defang_url` via `call_mcp` on confirmed malicious or C2 URLs before writing final markdown reports. | ||
|
|
||
| ## Failure Recovery | ||
|
|
||
| - If `cyberchef_from_base64` throws a padding error, retry with `urlSafe: true` or inspect whether characters are URL percent-encoded first. | ||
| - If `cyberchef_from_hex` produces unprintable characters, check if the input is big-endian or uses custom delimiters (`0x`, `Space`, `,`). | ||
| - If `call_mcp` returns an unknown tool error, call `search_mcp_tools(connection="cyberchef", query="...")` to discover the exact tool names registered by the server. | ||
|
|
||
| If uncertain, query web_search with: | ||
| `site:gchq.github.io/CyberChef cyberchef <operation_name>` | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.