Skip to main content

AI-powered vulnerability scanner for Nigerian developers and global SMBs

Project description

Permi

PyPI version CI

AI-powered vulnerability scanner for Nigerian developers and global SMBs.

Permi scans live websites and source code for security vulnerabilities, then uses AI to filter out false positives — so you only see findings that actually matter.

Built in Nigeria. For Nigeria. Then for the world.


Two scan modes

--url — Live web scanning

Point Permi at any website. It crawls the pages, tests for SQL injection, XSS, and checks security headers on the running application.

permi scan --url https://yoursite.com

--path — Static source code scanning

Point Permi at a local folder or GitHub repository. It reads your code files, matches vulnerability patterns, and flags issues before they ship.

permi scan --path ./myapp
permi scan --path https://github.com/user/repo

What Permi detects

Web scanning (--url)

  • SQL Injection — error-based, boolean-based blind, time-based blind
  • Cross-Site Scripting (XSS) — reflected XSS with context-aware testing
  • Missing Security Headers — HSTS, CSP, X-Frame-Options, X-Content-Type-Options
  • Server Information Disclosure — Server and X-Powered-By header leakage

Source code scanning (--path)

  • SQL Injection — string concatenation, f-strings, % formatting in queries
  • Cross-Site Scripting — innerHTML, document.write, Jinja2 |safe filter
  • Hardcoded Secrets — passwords, API keys, AWS keys, Paystack/Flutterwave secrets
  • Insecure Practices — eval(), exec(), pickle.loads(), SSL verification disabled, debug mode
  • USSD Vulnerabilities — unvalidated sessionId, phoneNumber, serviceCode (Nigerian-specific)

Installation

pip install permi

Requires Python 3.9+. Works on Windows, macOS, and Linux.


Usage

Scan a live website:

permi scan --url https://yoursite.com

Scan a local project:

permi scan --path ./myapp

Scan a GitHub repository:

permi scan --path https://github.com/user/repo

Show only high severity findings:

permi scan --url https://yoursite.com --severity high

Export results as JSON:

permi scan --url https://yoursite.com --output json

Skip AI filter (offline mode, path scan only):

permi scan --path ./myapp --offline

Limit pages crawled (web scan):

permi scan --url https://yoursite.com --max-pages 50

Save your API key once (enables AI filtering):

permi setup --api-key sk-or-your-key-here

Check your configuration:

permi info

Submit feedback:

permi feedback

Setup — AI false positive filter

Permi uses OpenRouter to filter false positives with AI. Create a free account, generate an API key, and add it to a .env file:

OPENROUTER_API_KEY=sk-or-your-key-here

No API key? Use --offline to skip AI filtering. All raw findings are shown.


Example output — web scan

  ██████╗ ███████╗██████╗ ███╗   ███╗██╗
  ██╔══██╗██╔════╝██╔══██╗████╗ ████║██║
  ██████╔╝█████╗  ██████╔╝██╔████╔██║██║
  ██╔═══╝ ██╔══╝  ██╔══██╗██║╚██╔╝██║██║
  ██║     ███████╗██║  ██║██║ ╚═╝ ██║██║
  ╚═╝     ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚═╝

  AI-Powered Vulnerability Scanner
  Built in Nigeria. For Nigeria. Then for the World.

[Permi] Mode     : Web scan (active HTTP testing)
[Permi] Target   : https://testsite.com
[Permi] Crawl    : up to 30 pages

[Permi] Engine found 4 raw finding(s)

[Permi] Running AI filter on 4 finding(s)...

  [1/4] WEB_SQL001 line 0 — REAL  SQL error returned when quote injected into 'id' parameter.
  [2/4] WEB_XSS001 line 0 — REAL  Payload reflected unencoded into HTML response.
  [3/4] WEB_HDR001 line 0 — REAL  Missing HSTS, CSP, and X-Frame-Options headers.
  [4/4] WEB_HDR002 line 0 — FP    Server header present but version not disclosed.

[Permi] Filter complete — 3 real  |  1 false positive(s) removed

────────────────────────────────────────────────────────────────────────
  [1] [HIGH] WEB_SQL001  SQL Injection — Error-based

  URL      : https://testsite.com/search
  Parameter: id
  Payload  : '
  Evidence : DB error: you have an error in your sql syntax
  Why      : Unsanitised input passed directly to a database query.
  AI       : REAL  SQL syntax error confirms user input reaches the query unescaped.

════════════════════════════════════════════════════════════════════════
  SCAN SUMMARY
════════════════════════════════════════════════════════════════════════
  Total findings  : 3  (filtered 1 false positive(s))
  High    : 2
  Medium  : 1
  Low     : 0
════════════════════════════════════════════════════════════════════════

Nigerian-specific rules

Permi includes vulnerability rules built specifically for the Nigerian development context — USSD gateway misconfigurations, Paystack and Flutterwave credential exposure, and NDPR-relevant checks. No foreign scanner understands this market the way Permi does.


Built by

Nasarah Peter Dashe — Cybersecurity student, University of Jos, Nigeria.

Built in Nigeria. For Nigeria. Then for the World.


Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

permi-0.2.4.tar.gz (38.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

permi-0.2.4-py3-none-any.whl (39.2 kB view details)

Uploaded Python 3

File details

Details for the file permi-0.2.4.tar.gz.

File metadata

  • Download URL: permi-0.2.4.tar.gz
  • Upload date:
  • Size: 38.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for permi-0.2.4.tar.gz
Algorithm Hash digest
SHA256 55e950bc617b29f1f4c29a6c405e9c8d5f5788664f09ac8e28e6910e55a5f7b0
MD5 2c3f5499a63f828e35df81d7c165725c
BLAKE2b-256 e8ed0195df4e62e968e0cf6087c2cb4ce61bdffbd8e651925cf31bb008a4d22e

See more details on using hashes here.

File details

Details for the file permi-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: permi-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 39.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for permi-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 dee1d1030d98293a8eaed51a59cb940ae9724234593f5b54bce93967e8a24bb5
MD5 c23aa95a24f942c153b0cc71c5d45fad
BLAKE2b-256 ae65b5a78f569e35cbe5472dc6d4d61913f82615cfacd9ad638b4597c10a11f1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page