Skip to content

Conversation

@fproulx-boostsecurity
Copy link
Contributor

@fproulx-boostsecurity fproulx-boostsecurity commented Jan 31, 2026

This pull request enhances the detection and reporting of "Living Off The Pipeline" (LOTP) tool usage by adding support for identifying and recording the specific target files associated with each LOTP tool invocation. The changes introduce a mapping and resolution logic for both static and dynamic LOTP targets, update the findings metadata to include these targets, and expand the test suite to validate the new functionality.

LOTP Target Resolution and Reporting Improvements:

  • Added a mapping (lotp_static_targets and lotp_dynamic_target_patterns) and a new utility function resolve_lotp_targets in utils.rego to determine the relevant target files for a wide range of LOTP tools, supporting both static file associations (like npmpackage.json) and dynamic pattern extraction (like bash scripts).
  • Updated the untrusted_checkout_exec rule to include a new lotp_targets field in findings metadata, using the resolved targets for each detected LOTP tool usage across GitHub Actions, Azure DevOps, and Tekton pipelines. [1] [2] [3] [4]
  • Extended the FindingMeta struct in Go to include a LOTPTargets field, ensuring structured output of target files in scan results.

Test Suite Enhancements:

  • Expanded and updated unit tests in inventory_test.go to check that the correct LOTPTargets are reported for various LOTP tools, including cases with multiple targets and dynamic extraction from script content. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
  • Added a new test workflow (test_new_fields.yml) to exercise and validate the multi-target extraction logic for tools like bash and chmod.

These changes improve the precision and usefulness of pipeline security findings by associating each LOTP tool invocation with the exact files involved, aiding both automated analysis and manual review.

Resolves the target file(s) an attacker should inject into when
exploiting a pwn request vulnerability. Static targets use a lookup
table (npm→package.json, make→Makefile, etc.), dynamic targets
extract file paths via regex from step.run content.

The field is an array (lotp_targets) to handle cases where a single
run: block references multiple scripts. URL-based references are
filtered out to only surface local repository files.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

This comment was marked as resolved.

@fproulx-boostsecurity fproulx-boostsecurity marked this pull request as ready for review February 2, 2026 18:48
@fproulx-boostsecurity fproulx-boostsecurity requested a review from a team as a code owner February 2, 2026 18:48
@fproulx-boostsecurity fproulx-boostsecurity changed the title Add lotp_targets field to untrusted_checkout_exec findings Add more structured metadata fields for programmatic access of LOTP targets Feb 2, 2026
@fproulx-boostsecurity fproulx-boostsecurity merged commit f350a41 into main Feb 2, 2026
17 checks passed
@fproulx-boostsecurity fproulx-boostsecurity deleted the feat/lotp-target branch February 2, 2026 19:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants