TELCOMA Global / Secret & Personal Data Scanner for Confluence / Documentation
Find secrets and personal data in Confluence, and work through them.
Secret & Personal Data Scanner reads the current version of every page and blog post on your Confluence Cloud site and lists the passwords, keys and personal data written into them, by space and page. The app only reads. It has no permission to change a page, and it never stores a full value.
Install
Two steps, both inside Confluence.
Find the app
In Confluence go to Settings → Find new apps and search for Secret & Personal Data Scanner. Approve its permissions: read permissions only.
Start the free trial
The app is paid per user through the Atlassian Marketplace, with a free trial. While the trial runs, the admin page shows how many days are left.
Confluence administrators open the app under Confluence administration → Secret & Personal Data Scanner. Nobody else can use it: the app asks Confluence on every request whether the person is a Confluence administrator, and refuses if it can't confirm it.
Scans
A full scan, a weekly scan, and a check on every edit.
Click Scan all pages. The app lists every space, then reads the current version of every page and blog post in each space, with its title and text, and checks them against its rules. A progress line shows the step: Listing spaces, Scanning pages and blog posts (with the space it is on and how many pages it has scanned), and Removing findings from pages that are gone. You can leave the page; the scan carries on.
- Stop scan asks first. Findings saved so far are kept, and the next full scan starts again from the first space.
- If a scan makes no progress for 20 minutes, the page says The scan has stopped moving and offers Start again. Findings saved so far are kept.
- The line next to the button shows the last full scan: when it finished, whether it was started from the page (and by whom) or was the weekly scan, how many pages it scanned and how many had findings.
- Weekly scan. A full scan also starts once a week by itself. It is skipped if a scan is already running.
- On every edit. When a page or blog post is created, edited or restored from the trash, or a page is moved, the app scans that one page again.
- At the end of a full scan, findings on pages the scan did not see (trashed, deleted, archived, or no longer visible to the app) are removed.
- If the app can't read a space, it skips it, says so in a warning after the scan, and keeps that space's earlier findings.
What it looks for
Twenty types, in two groups.
These are the names you see in the Type column and filter.
- Passwords are found after a word like password: or pwd =, on the line after a line that ends in Password:, in a table cell under a Password column heading, and inside a connection string such as postgres://user:password@host. Placeholders such as ********, <password>, ${VAR} or see vault are not reported.
- Card numbers must pass the Luhn check and start like a real card (Visa, Mastercard, American Express, Discover, JCB, Diners Club, UnionPay, Maestro, RuPay or Mir). IBANs must have the right length for their country and pass the mod 97 check. Aadhaar numbers must pass the Verhoeff check.
- Phone numbers without a +, brackets or dashes, bare 9-digit SSNs and bare 12-digit Aadhaar numbers are only reported with a word like phone, SSN or Aadhaar on the same line, on the line before, or in the heading of their table column.
- Random-looking strings of 32 characters or more are not reported inside web addresses, because page links are full of ids, unless they follow a parameter named like a secret (?api_key=, &token=, &sig=).
- Well-known sample values are skipped, such as AWS's own example keys, addresses at example.com and no-reply senders, and SSNs that are never issued.
- The title is scanned as well as the text. Tables are read row by row, with each value read against its column heading. Where two types match the same text, the more specific one wins: a GitHub token is not also listed as a random-looking string.
Findings
Every finding, by space and page.
The line above the table counts open findings and the pages they are on, and how many are resolved or marked as false positives. On a large site the counts cover the first 2,000 pages with findings, and the line says so.
- Filters. Space (each with its number of open findings), Type (All, All secrets, All personal data, or one type with its open count) and Status (Open, which is the default, Resolved, False positive or All).
- Space and Page. The page title links to the page in Confluence. Blog posts are marked Blog post. A value found in a title is masked in the title too.
- Type and Value. The value shows its first and last 2 characters, for example ab****yz. Values shorter than 10 characters are fully masked, and so are SSNs.
- Line. The line around the value, with every value on that line masked, then Line 12 or In the title, and 3 times on this page when the same value appears more than once. A note says when a page was so long that only its first part was scanned, or holds more findings than are listed.
- Last edited. Who last edited the page, and when.
- Status. Open, Resolved or False positive, with who marked it and when.
When there are more rows, Load more fetches the next set. How it works at the top of the page gives a short summary of what the app does and doesn't scan.
Marks and rescans
Marks stay in place after the next scan.
- Resolved and False positive mark an open finding. Reopen sets it back to open. Each mark records who made it and when.
- A mark belongs to one value on one page. The app recognises the value on the next scan by its keyed hash, so the mark stays. The same value on another page is a separate finding. If the value on the page changes, it shows as a new open finding.
- Rescan page scans that one page again now. Use it after someone has removed a value. If the page no longer exists, or the app can no longer see it, its findings are removed.
To remove a finding for good, edit the page in Confluence. The old value stays in the page history until that version is deleted in Confluence. The app is read-only, so it cannot do that for you.
Export
Take the findings to Excel. Values stay masked.
Under Export, choose Findings: All or Open only. The file is built in your browser and named secret-scanner- with the date.
Download Excel
Two sheets. Summary: when it was exported, all or open only, the number of rows and open findings, and a note that values are masked. Findings: one row per finding.
Download CSV
The Findings sheet as a plain file, for tools that don't open Excel.
Columns
Space, Space key, Page, Page type, Link, Type, Category, Masked value, Where, Line, Line text (masked), Times on page, Last edited by, Last edited, Status, Marked by, Marked on.
Safe files
Cells that a spreadsheet would read as a formula are written as plain text, so a page title can never run anything. Rows on pages you can't open hold only the type, the space and the date.
What it can't see
What the scan does not cover.
- Comments, attachments, older versions, drafts and archived pages. Only the current version of each page and blog post is scanned. Whiteboards, databases and text inside images or diagrams are not scanned either.
- Pages and spaces the app can't read. A page restricted so the app can't read it is not scanned. A space the app can't read is skipped, with a warning.
- Very long pages. Only the first 1,000,000 characters are scanned. A page keeps at most 200 findings. The table says when either happens.
- Deleted and trashed pages. Their findings go at the end of the next full scan, or straight away with Rescan page if Confluence still lets you open the page.
- Values the rules don't know. The rules are patterns and checks, not a guarantee. Some formats need a nearby word, as described above, to keep false positives down.
Your data
Nothing leaves Atlassian.
Spaces, and the current version of every page and blog post with its title and text. Whether you are a Confluence admin and whether you can open a page. Names of editors, shown on the page and in the export.
Nothing. The app has no write permission.
For each page with findings: masked values, masked lines, line numbers and keyed hashes, the masked title, and the last editor as an account ID. Marks, scan progress and the last 8 scans. Never a full value, a page body, or a user's display name or email.
Nowhere. No servers of our own, no requests outside Atlassian. Exports are built in your browser and saved to your device.
Full details in the privacy policy.
Frequently asked
The questions admins ask first.
How is it priced?
Per user, billed through Atlassian, with a free trial. The price will be on the Atlassian Marketplace listing.
Can I see the full value?
Not in the app. It never stores a full value, so it can't show one. Open the page from the link in the table to see it in Confluence.
Does it remove secrets from pages?
No. It has no write permission. Edit the page in Confluence, rotate the key if it was real, and delete the old page version if it must go from the history too.
I removed a value. Why is it still listed?
Editing a page makes the app scan it again, so the finding normally goes by itself. If it is still there, click Rescan page on the row.
What is a false positive?
Something that matches a rule but isn't a secret or personal data, such as a sample value in a how-to page. Mark it False positive and it stays marked after the next scan.
Can other people use it?
Only Confluence administrators. Each admin sees full details only on pages they can open in Confluence.
Support
Ask the people who built it.
When reporting a problem, include your site URL and what you expected to happen. Never send us a real password, key or piece of personal data; describe it, or make up a value in the same format. We never need passwords or tokens.
Get help
One business day, usually much less.
- [email protected]
- Support page
- Known limits, what to include, status
- Response time
- Within one business day