TavernKeeper Scan Report

devemberteam-ops/Pyre

Commit 17148f5 Reviewed

No material or immediate-danger concern was identified in this review.

This advisory report describes what the named tools and review process found at one exact commit. Unknown or unobserved behavior may still exist.

0 immediate danger 0 material 39 low

What this review found

No material or immediate-danger item was identified.

Deterministic technical evidence (30)
  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:108

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:107

  • zizmor reported excessive-permissions · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:239-257

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:214

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:78

  • zizmor reported artipacked · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:42

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:42

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:43

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:47

  • zizmor reported artipacked · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:107

  • zizmor reported excessive-permissions · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:73-101

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:97

  • zizmor reported excessive-permissions · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:22-285

  • zizmor reported artipacked · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:243

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:280

  • Gitleaks reported generic-api-key · gitleaks 8.30.1

    This technical signal is not part of the shipped runtime behavior.

    Policy reason: gitleaks-inert-placeholder · Execution scope: test-documentation-data

    Source: test/provider_sync_apply_test.dart:29

  • Gitleaks reported generic-api-key · gitleaks 8.30.1

    This technical signal is not part of the shipped runtime behavior.

    Policy reason: gitleaks-inert-placeholder · Execution scope: test-documentation-data

    Source: test/provider_sync_apply_test.dart:47

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:193

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:244

  • Gitleaks reported generic-api-key · gitleaks 8.30.1

    This technical signal is not part of the shipped runtime behavior.

    Policy reason: gitleaks-inert-placeholder · Execution scope: test-documentation-data

    Source: test/provider_sync_apply_test.dart:29

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:269

  • zizmor reported excessive-permissions · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:209-237

  • zizmor reported excessive-permissions · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:103-208

  • zizmor reported artipacked · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:77

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:253

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:77

  • Gitleaks reported generic-api-key · gitleaks 8.30.1

    This technical signal is not part of the shipped runtime behavior.

    Policy reason: gitleaks-inert-placeholder · Execution scope: test-documentation-data

    Source: test/provider_sync_apply_test.dart:47

  • zizmor reported excessive-permissions · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:33-71

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:243

  • zizmor reported unpinned-uses · zizmor 1.28.0

    The code has a known weakness, though this scan does not show that anyone can exploit it here.

    Policy reason: zizmor-known-workflow-rule · Execution scope: automation

    Source: .github/workflows/release.yml:67

Contextual expected matches (9)

Gitleaks reported generic-api-key

Expected behavior · high confidence

The scanner flagged a test file line that looks like a secret, but it is a fake test value used to check that the app properly hides real API keys from error messages. No real credential is exposed.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Detailed technical wording was omitted by the public report safety filter.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
test
Source
test/scrub_provider_body_test.dart:13

OpenGrep reported tavernkeeper.persistence.startup-modification

Expected behavior · high confidence

The scanner flagged code about starting something automatically, but this is just camera initialization for a QR code scanner screen. It has nothing to do with hidden persistence or auto-starting malicious behavior.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.persistence.startup-modification. The match applies to this repository.

Contextual assessment: The OpenGrep persistence.startup-modification rule matched line 587, which is a comment explaining why autoStart is set to false on a MobileScannerController. The code manages camera lifecycle for a QR code scanner page: initState calls _start to open the camera, and didChangeAppLifecycleState restarts it on app resume. This is standard Flutter camera management within a user-facing scanner widget, not system persistence, boot modification, or concealed auto-start behavior. The scanner page is pushed as a route by user action and disposed on pop. No data is persisted, no background service is registered, and no system-level startup mechanism is involved.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.persistence.startup-modification
File role
production
Source
lib/screens/lan_connect_screen.dart:587

Gitleaks reported generic-api-key

Expected behavior · high confidence

The scanner flagged another test file line containing a fake key-like string. It is a synthetic test value used to verify redaction logic, not a real credential.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Detailed technical wording was omitted by the public report safety filter.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
test
Source
test/scrub_provider_body_test.dart:28

Gitleaks reported generic-api-key

Expected behavior · high confidence

This is a fake key used in a test that checks the app properly hides real API keys from error messages. The test value is not a real credential and never leaves the test file.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Line 13 contains a test fixture string already wrapped in a REDACTED_SECRET marker. The test file verifies that scrubProviderBody correctly redacts API keys from provider error responses. The value is a synthetic test constant used only within the test scope and is not a live or usable credential. The file's purpose is explicitly to validate credential redaction logic, which is a defensive security measure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
test
Source
test/scrub_provider_body_test.dart:13

Gitleaks reported generic-api-key

Expected behavior · high confidence

The scanner flagged a string that looks like a key, but it is just a label the app uses internally to remember whether a one-time data migration has finished. It is not a password or secret credential.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: The gitleaks generic-api-key rule matched the string literal 'attachments.migrated.v1' on line 32, which is a SharedPreferences boolean key name used to track whether the one-shot attachment migration has completed. It is not a credential, API key, or secret. The value is a constant identifier for local preference storage and carries no authentication or authorization significance. No credential exposure is present.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
production
Source
lib/services/attachment_migration.dart:32

Gitleaks reported generic-api-key

Expected behavior · high confidence

This is a made-up key string used in a test that ensures the app scrubs API keys from provider error messages. It is not a real credential and exists only in the test file.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Line 28 contains a synthetic hex-like string used as a test fixture to verify that scrubProviderBody redacts the literal active key even in unrecognized shapes. The value is a hardcoded test constant in a test file, not a live or usable credential. The test validates defensive redaction behavior and the fixture has no runtime reachability outside the test scope.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
test
Source
test/scrub_provider_body_test.dart:28

zizmor reported superfluous-actions

Expected behavior · high confidence

The scanner noted that a GitHub Actions step could also be done with built-in runner tools. This is a common, standard way to create GitHub releases and is not a security problem.

Technical evidence

Scanner reason: zizmor matched workflow-security rule superfluous-actions. The match applies to this repository.

Contextual assessment: The zizmor superfluous-actions info-level finding flags the use of softprops/action-gh-release@v2 at line 280, noting the action's functionality could be replicated by the runner's built-in gh CLI. This is a workflow style preference, not a security vulnerability. The action is pinned to v2, the release job has explicit contents:write permissions scoped to tag pushes only, and the release is created as a draft. No untrusted input flows into the action's parameters from fork PRs or issue bodies. There is no demonstrated security exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
zizmor 1.28.0
Rule
superfluous-actions
File role
tooling
Source
.github/workflows/release.yml:280

Gitleaks reported generic-api-key

Expected behavior · high confidence

The scanner flagged a line that looks like it contains a secret, but it is actually just a name for a stored setting. There is no real password or key here.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Gitleaks matched the generic-api-key pattern on line 32, which contains `static const String _prefKey = 'attachments.migrated.v1';`. This is a SharedPreferences key name used to track whether a one-time attachment migration has completed. It is a string literal naming a local preference entry, not a credential, token, or secret. No credential is present in the matched value or surrounding code. The file handles decoding inline data URLs and writing them to a local attachment store; no network or external destination is involved in this constant.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
production
Source
lib/services/attachment_migration.dart:32

OpenGrep reported tavernkeeper.persistence.startup-modification

Expected behavior · high confidence

The scanner flagged a camera configuration line, but this is just a setting that prevents the camera from auto-starting so the app can control it manually. It is normal camera handling code for a QR scanner screen.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.persistence.startup-modification. The match applies to this repository.

Contextual assessment: The OpenGrep persistence.startup-modification rule matched line 598, which is the autoStart:false parameter in the MobileScannerController constructor. This explicitly disables automatic camera startup so the app can manually drive start/stop lifecycle. The surrounding code is a _ScannerPageState that manages a camera for QR code scanning during LAN device pairing. The observer registration via WidgetsBinding.instance.addObserver is for app-lifecycle camera restart on resume, a standard Flutter pattern. No persistence mechanism, background service, or concealed startup behavior is present.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.persistence.startup-modification
File role
production
Source
lib/screens/lan_connect_screen.dart:598

Coverage and limitations

JavaScript coverage

Tools

Limitations

Technical scan identity