FYA(1)FYA(1)

Documentation

v0.6.0

Everything to install fya, scan your app, and wire it into CI.

CAUTION
fya performs active security testing. Only scan systems you own or are explicitly authorized in writing to test. Any non-local target requires --i-am-authorized.
01

Installation

fya needs Python 3.9 or newer. The core install pulls only requests and rich.

shell
pip install fya
pip install "fya[apk]"       # Android APK manifest analysis
pip install "fya[browser]"   # headless-browser crawler for SPAs

From a clone, with the test tooling:

shell
git clone https://github.com/ayam04/fya
cd fya
pip install -e ".[dev]"
02

Quickstart

Point fya at a local server or an APK. Localhost needs no authorization flag.

shell
fya scan http://127.0.0.1:8000
fya scan ./app-release.apk

fya scan http://127.0.0.1:8000 -o report.html   # shareable report
fya scan http://127.0.0.1:8000 --fail-on high    # exit non-zero in CI
fya tools                                         # list detectable external tools

New in v0.6.0: 33 more checks (91 total) and per-check selection. See the changelog for the full history.

Try it against the bundled deliberately-vulnerable app in the repo:

shell
python examples/vulnerable_app.py            # starts on http://127.0.0.1:5001
fya scan http://127.0.0.1:5001 --mode full -o report.html
03

The Claude skill

Prefer to stay in Claude? fya ships as a skill that makes Claude run the same non-destructive scan itself, with no package to install. It confirms you own the target, runs the checks, and reports in the chat.

Install it by copying one folder into your Claude skills directory:

shell
git clone https://github.com/ayam04/fya
cp -r fya/skills/fya ~/.claude/skills/fya

On Windows the destination is %USERPROFILE%\.claude\skills\fya. Then just ask Claude:

claude
scan http://localhost:3000 for vulnerabilities
check ./app-release.apk for security issues

Claude confirms the target and authorization, picks a mode and profile, runs the OWASP-mapped checks, and applies the same false-positive discipline as the CLI. It is fully agentic: it drives the probes with its own tools, so it works even where the package is not installed.

04

Targets

fya detects the target automatically. A path ending in .apk (or any zip containing an AndroidManifest) is analyzed statically. A local directory is treated as source and analyzed white-box. Anything else is a web target; a bare host defaults to http for localhost and private addresses and https otherwise.

shell
fya scan http://127.0.0.1:8000    # web target
fya scan ./app-release.apk        # android package
fya scan ./my-service             # source directory, white-box
05

Scan modes

A mode selects which family of checks runs. Pick one with --mode, refine with --only and --skip (each accepts a category or a single check id), or choose from a menu with --interactive. List them with fya modes.

ModeWhat it runs
autoEverything that applies to the detected target. The default.
reconPassive, read-only reconnaissance.
webWeb app: headers, TLS, active web checks, and API.
apiAPI surface plus supporting web checks.
mobileAndroid APK static analysis.
blackboxNo internals: input fuzzing and robustness plus outside-in web checks.
grayboxPartial knowledge: IDOR, auth bypass, and API contract probing.
whiteboxSource access: static analysis of a code directory.
fullEverything, aggressive, including external tool handoff.
CAUTION
Load, stress, and network-chaos testing are deliberately out of scope. They are denial-of-service shaped and break the non-destructive guarantee. Use k6, Locust, or Toxiproxy for those, on infrastructure you own.
06

Profiles

A profile sets how hard fya probes, independent of the mode. Request pacing adapts automatically and slows down on errors, timeouts, and slow responses. fya never floods a target or runs denial-of-service payloads.

ProfileBehavior
passiveRead-only. Headers, TLS, cookies, disclosure, fingerprinting.
safeNon-destructive active probes. Reflection, error signatures, CORS. The default.
aggressiveHeavier probing and external-tool handoff. Still non-destructive.
07

Authentication & scope

Scan behind a login, and keep the scan inside a boundary with scope and budget controls.

shell
# authenticated
fya scan https://staging.example.com --i-am-authorized \
  -H "Authorization: Bearer $TOKEN"
fya scan http://127.0.0.1:8000 --cookie "session=abc123"

# scope and budget
fya scan http://127.0.0.1:8000 --include '/app' --exclude '/logout'
fya scan http://127.0.0.1:8000 --max-requests 500

# render JS and single-page apps (needs the [browser] extra)
fya scan http://127.0.0.1:8000 --spa
08

Baseline & CI

Record the findings you have accepted, then fail the build only on new ones.

shell
fya scan http://127.0.0.1:8000 --write-baseline .fya-baseline.json
fya scan http://127.0.0.1:8000 --baseline .fya-baseline.json --fail-on high
09

Reports

Format is inferred from the -o extension, or set it with --format. Use --fail-on to return a non-zero exit code.

FormatUse it for
consoleThe default. A colored summary table in your terminal.
jsonMachine-readable output for pipelines and dashboards.
sarifUpload to GitHub code scanning. Includes fingerprints for de-duplication.
markdownDrop into issues, wikis, or pull requests.
htmlA self-contained, shareable page.
10

Checks catalog

91 checks across 19 areas, each mapped to the OWASP Top 10 or MASVS and a CWE. Every check runs only at or above its minimum profile.

web passive

min: passive
web.security_headersweb.version_disclosureweb.insecure_cookies

web active

min: safe
web.reflected_xssweb.sql_injectionweb.open_redirectweb.path_traversalweb.cors_misconfigweb.cors_advancedweb.dangerous_methodsweb.sensitive_files

web advanced

min: safe / aggressive
web.sstiweb.csrfweb.host_headerweb.crlfweb.cache_poison_headersweb.url_override_headers

web advanced injection

min: safe / aggressive
web.command_injectionweb.xxe_injectionweb.blind_sql_injectionweb.lfi_wrappersweb.json_nosql_operators

web ssrf & injection

min: safe
web.ssrfweb.nosql_injectionweb.xpath_ldap_ssi_injection

web secrets & files

min: safe
web.js_secretsweb.source_map_exposureweb.vcs_exposureweb.exposed_config_secretsweb.directory_listing

web exposure & debug

min: safe / aggressive
web.debug_info_pagesweb.backup_files

web crypto & tokens

min: safe
web.jwt_weak_secretweb.jwt_header_injectionweb.mixed_contentweb.serialized_objects

web hardening

min: passive
web.csp_weaknessesweb.jwt_weak_algorithmweb.jwt_missing_expiryweb.jwt_sensitive_claimsweb.frontend_librariesweb.modern_headersweb.cookie_scopeweb.security_txtweb.robots_sensitive_paths

black box

min: safe
blackbox.input_fuzzing

gray box

min: safe
graybox.idorgraybox.auth_bypass

white box (source)

min: passive / safe
whitebox.hardcoded_secretswhitebox.dangerous_patternswhitebox.cicd_misconfigwhitebox.static_analysiswhitebox.committed_key_materialwhitebox.weak_crypto_usagewhitebox.sql_string_buildingwhitebox.auth_verification_disabled

white box (iac & supply chain)

min: passive
whitebox.dockerfile_hardeningwhitebox.compose_hardeningwhitebox.k8s_workload_securitywhitebox.terraform_exposurewhitebox.insecure_package_sourcewhitebox.actions_supply_chain

tls

min: passive
tls.certificatetls.weak_protocoltls.https_upgradetls.certificate_strength

api

min: safe
api.docs_exposureapi.graphql_introspectionapi.graphql_hardeningapi.verbose_errorsapi.admin_endpointsapi.actuator_exposureapi.oidc_misconfigapi.soap_wsdl_exposure

apk static

min: passive
apk.hardcoded_secretsapk.cleartext_urlsapk.manifestapk.webview_config

apk manifest & config

min: passive
apk.network_security_configapk.provider_exposureapk.backup_rulesapk.deeplink_surfaceapk.signing_scheme

apk code & build

min: passive
apk.weak_cryptoapk.insecure_tls_codeapk.build_hardening

integrations

min: aggressive
integrations.nucleiintegrations.niktointegrations.nmapintegrations.sqlmapintegrations.tls
11

External tools

If any of these are on your PATH, fya runs them and folds their results into one normalized report. If not, it falls back to built-in checks. Check what is detected with fya tools.

nucleiniktosqlmapnmaptestssl.shsslyzejadxapkleaks
12

Docker

The image bundles nmap, so external-tool handoff works out of the box.

shell
docker build -t fya .
docker run --rm --network host fya scan http://127.0.0.1:8000
13

Responsible use

fya performs active security testing. Only scan systems you own or are explicitly authorized in writing to test. Scanning a non-local target requires --i-am-authorized. Scans are non-destructive by default, with no flooding and no denial-of-service payloads. You are responsible for how you use this tool.

14

Licensing

fya is dual-licensed. It is free for noncommercial and personal use under the PolyForm Noncommercial License 1.0.0, which covers hobby projects, research, education, personal study, and nonprofit or government use.

Commercial use requires a paid license. That means using fya in, or for, a for-profit company's products, services, or internal operations. To obtain one, contact ayamullahkhan04@gmail.com. Versions before 0.5.0 were released under the MIT License and remain available under those terms.