Proofpoint URL Defense — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Proofpoint URL Defense (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Proofpoint URL Defense rewrites URLs in email messages to route clicks through Proofpoint's analysis infrastructure. When a user clicks a rewritten URL, Proofpoint performs real-time analysis of the destination before allowing or blocking access. This provides click-time protection - even if a URL was clean when the email was delivered, it will be analyzed again at the moment the user clicks.
URL Defense is a critical layer of protection because many attacks use time-delayed weaponization: a URL is clean when the email is sent but becomes malicious hours or days later.
answers "who clicked this URL". The full permitted/blocked click stream is proofpoint-tap.
proofpoint-quarantine if it is still held, or proofpoint-forensics if it was delivered.
Proofpoint policy setting, and no tool here changes it; use the Proofpoint console. The same is true on a Checkpoint Harmony tenant: that plugin exposes no policy tool either, so its URL_REWRITE configuration is console-only as well. Do not route this question to a Harmony skill expecting a tool to exist.
Proofpoint rewrites URLs in email bodies and HTML attachments. The rewritten URL format is:
https://urldefense.proofpoint.com/v2/url?u=<encoded_original_url>&d=<domain_key>&c=<context>&r=<recipient_hash>&m=<message_hash>&s=<signature>&e=Version 3 format:
https://urldefense.com/v3/__<encoded_url>__;!!<encoded_chars>!<signature>$| Component | Description |
|---|---|
u | URL-encoded original URL (v2) |
d | Domain key for the organization |
c | Context identifier |
r | Recipient hash |
m | Message hash |
s | HMAC signature for integrity |
e | Empty (reserved) |
When a user clicks a rewritten URL, Proofpoint performs:
| Verdict | User Experience | Description |
|---|---|---|
allow | User proceeds to destination | URL is clean |
warn | Warning interstitial page | URL is suspicious but not confirmed malicious |
block | Block page shown | URL is confirmed malicious |
isolate | Opened in browser isolation | URL is risky, opened in safe container |
In the v2 rewrite format, the original URL is encoded:
- replaces /_ replaces =In the v3 format, the original URL uses a different encoding:
__ delimiters surround the encoded URL!! section$ terminates the URL| Field | Type | Description |
|---|---|---|
originalUrl | string | The original URL before rewriting |
rewrittenUrl | string | The Proofpoint-rewritten URL |
verdict | string | allow, warn, block, isolate |
threatId | string | Threat ID if URL is malicious |
classification | string | malware, phish, spam, clean |
firstSeen | datetime | When the URL was first observed |
lastSeen | datetime | Most recent observation |
clickCount | int | Number of clicks on this URL |
blockCount | int | Number of times clicks were blocked |
redirectChain | string[] | Full redirect chain to final URL |
finalUrl | string | Final destination after redirects |
certificate | object | SSL certificate details of the destination |
| Field | Type | Description |
|---|---|---|
encodedUrl | string | The Proofpoint-rewritten URL provided |
decodedUrl | string | The original URL extracted |
version | string | Rewrite version (v2 or v3) |
valid | boolean | Whether the URL is a valid Proofpoint rewrite |
| Tool | Description | Key Parameters |
|---|---|---|
proofpoint_url_decode | Decode one or many Proofpoint-rewritten URLs back to the originals | urls (required, array) |
proofpoint_url_analyze | Analyze a URL for threats — returns classification, risk score, associated campaigns | url (required) |
Two tools, and that is the whole domain. proofpoint_url_decode takes an array, so batch decoding is the ordinary call, not a separate tool — pass one URL in a one-element array. proofpoint_url_analyze is also the verdict tool: the classification and risk score it returns are the verdict, so there is no separate verdict call to poll.
Click activity is not keyed by URL anywhere. URL Defense here decodes and analyses; it has no click surface. Click records live in TAP — proofpoint_tap_get_clicks_permitted and proofpoint_tap_get_clicks_blocked — and both are keyed by time window, not by URL. To answer "who clicked this link", pull the clicks for the relevant window and filter the results on the URL yourself, and remember TAP's 24-hour SIEM ceiling: outside that window you get an empty result that reads like "nobody clicked" and means "no data".
proofpoint_url_decode with urls set to a one-element arraycontaining the full rewritten URL
proofpoint_url_analyze to check the URL's current threat statusproofpoint_url_analyze with the URLproofpoint_tap_get_clicks_permitted for the relevanttime window and filter the results for this URL to see who clicked
proofpoint_url_decode with the whole array in urls — one callproofpoint_tap_get_clicks_permitted andproofpoint_tap_get_clicks_blocked for the window, then filter both result sets on the URL — there is no per-URL click tool
proofpoint_url_analyze for a URL that was previously clean —URLs can become malicious after delivery, and the analysis reflects the current classification, not the one at delivery time
containing it
proofpoint-forensics skill
To manually decode a v2 Proofpoint URL:
u= parameter value- with /_ with =Input: https://urldefense.proofpoint.com/v2/url?u=https-3A__example.com_path-3Fparam-3Dvalue&d=...
Step 1: https-3A__example.com_path-3Fparam-3Dvalue
Step 2: https-3A//example.com/path-3Fparam-3Dvalue
Step 3: https-3A//example.com/path-3Fparam=value
Step 4: https://example.com/path?param=valueTo manually decode a v3 Proofpoint URL:
__ delimiters!! sectionInput: https://urldefense.com/v3/__https://example.com/path__;!!ABC123!def$
Output: https://example.com/pathNote: Always use the proofpoint_url_decode tool rather than manual decoding to ensure accuracy.
| Code | Message | Resolution |
|---|---|---|
| 400 | Invalid URL format | Ensure the URL is a valid Proofpoint-rewritten URL |
| 400 | Unsupported URL version | Only v2 and v3 formats are supported |
| 401 | Authentication failed | Verify service principal and secret |
| 403 | URL Defense API not enabled | Ensure your license includes URL Defense API |
| 404 | URL not found | The URL may not have been processed by Proofpoint |
| 429 | Rate limit exceeded | Implement backoff |
| Issue | Cause | Resolution |
|---|---|---|
| Invalid signature | URL was modified after rewriting | The URL may have been truncated or altered |
| Unknown version | URL does not match v2 or v3 format | It may not be a Proofpoint URL |
| Expired URL | URL is older than the retention period | Original URL cannot be recovered from the API |
proofpoint_url_decode takes an array; pass every URL in one call rather than looping~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.