TooLooLoo

Security policy, JQL Gaps for Jira

This is the security policy for the Jira Cloud app JQL Gaps for Jira, published by TooLooLoo. It states how to report a vulnerability, what is promised in return, and what the app does with the data it reads. Every claim below is enforced by the app's Forge manifest or by an automated test, and can be checked by a Jira administrator without taking our word for it.

Last updated: 29 August 2026.

Reporting a vulnerability

Write to support@toolooloo.fr Please include what you observed, the steps to reproduce it, and the function name and arguments involved, with any sensitive values in the example replaced.

What you get back:

Please report privately first and give us the time above before disclosing publicly. We will credit you when the fix ships, unless you prefer otherwise.

There is no monetary bounty. We would rather say so than imply one.

Scope

In scope: the app's 26 JQL functions, its scheduled and issue-change triggers, its reference page, and this website.

Out of scope: Atlassian's own products and infrastructure, which belong to Atlassian's bug bounty programme; findings that require a Jira administrator to already be malicious; and reports produced only by an automated scanner with no demonstrated impact.

What the app can reach, and what it cannot

No data leaves Atlassian. The app declares no external domain in its manifest and makes no outbound call. This is not a promise about our conduct, it is a property of the manifest: adding a single outbound address, even for an image, removes an app from Atlassian's Runs on Atlassian programme, and eligibility is re-checked at every deployment.

There is no inbound entry point. The app has no web trigger. Every entry point is a JQL function called by Jira's own search engine, a scheduled trigger, an issue-change trigger, or the app's own static reference page. There is no URL anyone on the internet can call.

Six permission scopes, all narrow, none of them "edit issues". read:jira-work, read:jira-user, read:sprint:jira-software, read:field:jira, write:field:jira, write:app-data:jira. The app never holds write:jira-work, so it cannot create or edit a work item, and it never touches Forge's own storage: it requests no storage:app scope at all.

We hold no credential. Forge supplies the authenticated client. The app never asks a user for a Personal Access Token, a password or any other shared secret, and would have nowhere to put one.

Where your data lives

Nowhere but Jira. The app's only persisted state is a single custom field it owns, written through the Jira API endpoint reserved for an app's own fields — no other app or user can write to it. There is no database, no server and no third party. Uninstalling the app removes that field and every value it ever wrote.

How search results stay within your own permissions

Every function's Jira reads run with the app's own access, which is what lets four of them answer instantly across a whole instance instead of scanning it. What those reads find is never shown directly: a function returns a list of issue identifiers, which Jira itself re-evaluates under the searching user's own permissions before displaying anything, exactly as it does for any other part of a JQL search. An issue you cannot browse is filtered out by Jira, not by this app.

Development practices

Contact

support@toolooloo.fr