RepoPilotOpen in app →

pinpoint-apm/pinpoint

APM, (Application Performance Management) tool for large-scale distributed systems.

Healthy

Healthy across the board

weakest axis
Use as dependencyHealthy

Permissive license, no critical CVEs, actively maintained — safe to depend on.

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit today
  • 6 active contributors
  • Distributed ownership (top contributor 39% of recent commits)
Show all 6 evidence items →
  • Apache-2.0 licensed
  • CI configured
  • Tests present

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/pinpoint-apm/pinpoint)](https://repopilot.app/r/pinpoint-apm/pinpoint)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/pinpoint-apm/pinpoint on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: pinpoint-apm/pinpoint

Generated by RepoPilot · 2026-05-09 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/pinpoint-apm/pinpoint shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

GO — Healthy across the board

  • Last commit today
  • 6 active contributors
  • Distributed ownership (top contributor 39% of recent commits)
  • Apache-2.0 licensed
  • CI configured
  • Tests present

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live pinpoint-apm/pinpoint repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/pinpoint-apm/pinpoint.

What it runs against: a local clone of pinpoint-apm/pinpoint — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in pinpoint-apm/pinpoint | Confirms the artifact applies here, not a fork | | 2 | License is still Apache-2.0 | Catches relicense before you depend on it | | 3 | Default branch master exists | Catches branch renames | | 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 5 | Last commit ≤ 30 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>pinpoint-apm/pinpoint</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of pinpoint-apm/pinpoint. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/pinpoint-apm/pinpoint.git
#   cd pinpoint
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of pinpoint-apm/pinpoint and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "pinpoint-apm/pinpoint(\\.git)?\\b" \\
  && ok "origin remote is pinpoint-apm/pinpoint" \\
  || miss "origin remote is not pinpoint-apm/pinpoint (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
  && ok "license is Apache-2.0" \\
  || miss "license drift — was Apache-2.0 at generation time"

# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
  && ok "default branch master exists" \\
  || miss "default branch master no longer exists"

# 4. Critical files exist
test -f "pom.xml" \\
  && ok "pom.xml" \\
  || miss "missing critical file: pom.xml"
test -f "agent-module/agent-plugins/proxy-common/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy" \\
  && ok "agent-module/agent-plugins/proxy-common/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy" \\
  || miss "missing critical file: agent-module/agent-plugins/proxy-common/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy"
test -f "agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParser.java" \\
  && ok "agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParser.java" \\
  || miss "missing critical file: agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParser.java"
test -f ".github/workflows/maven.yml" \\
  && ok ".github/workflows/maven.yml" \\
  || miss "missing critical file: .github/workflows/maven.yml"
test -f "BUILD.md" \\
  && ok "BUILD.md" \\
  || miss "missing critical file: BUILD.md"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 30 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~0d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/pinpoint-apm/pinpoint"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

Pinpoint is a distributed application performance management (APM) tool that traces transactions across large-scale Java/PHP/Python systems by instrumenting code at runtime, providing call-stack visibility and topology mapping without requiring code changes. It's inspired by Google Dapper and captures request flows from entry point through all downstream service calls, helping teams identify bottlenecks and latency sources across microservices architectures. Monorepo structured as: agent-module/ contains runtime instrumentation engine with plugin architecture (agent-plugins/ subdirectory with framework-specific interceptors like proxy-apache/), separate web UI in TypeScript/HTML, backend services for data collection/aggregation. Agent-plugins follow consistent pattern: each framework gets a dedicated module (e.g., proxy-apache/) with Metadata providers and Request parsers under com.navercorp.pinpoint.agent.plugin namespace.

👥Who it's for

DevOps engineers and platform teams managing large distributed Java systems (particularly Naver-scale infrastructure) who need real-time transaction tracing, code-level visibility, and minimal performance overhead (~3%) without modifying application code; also APM agent plugin developers extending Pinpoint to new frameworks.

🌱Maturity & risk

Highly mature production system: v3.0.5 stable release (as of April 2026), extensive CI/CD via GitHub Actions (maven.yml, frontend-test.yml, it-schedule.yml), codecov integration showing test coverage tracking, large active codebase (21M+ lines Java, 2M+ HTML, 1.8M TypeScript), and documented deployment patterns including Kubernetes support. Clear verdict: production-ready and actively maintained.

Low risk: strong organization backing (Naver Corp), active CI automation, but watch for: Thrift-based serialization (234 lines suggests critical RPC layer) requiring careful protocol versioning during upgrades, complex agent bytecode instrumentation (agent-module/ structure) which is fragile across JVM versions, and distributed system debugging complexity when something breaks. Plugin ecosystem sprawl (agent-plugins/) could fragment maintenance burden.

Active areas of work

Version 3.1.0-SNAPSHOT in active development (seen in pom.xml parent version), GitHub Actions workflows running Maven builds and frontend tests on every push, Dependabot issue automation enabled, integration test suite running on schedule (it-schedule.yml), and Docker image generation workflow active. Recent focus appears to be stabilizing 3.0.x while developing 3.1.0 features.

🚀Get running

git clone https://github.com/pinpoint-apm/pinpoint.git && cd pinpoint && ./mvnw clean install (Maven wrapper in .mvn/wrapper/). For frontend: cd web && npm install && npm start. See BUILD.md in root for detailed build instructions and .claude/CLAUDE.md for contributor guidelines.

Daily commands: Backend: ./mvnw clean package -DskipTests followed by running compiled collector/web modules (exact entry points in BUILD.md). Frontend: cd web && npm install && npm run dev. Agent: package agent-module/ and attach via -javaagent JVM flag to monitored application. Live demo available at http://223.130.142.103:8080/main/ApiGateway@SPRING_BOOT/5m.

🗺️Map of the codebase

  • pom.xml — Root Maven POM defining the entire project structure, dependencies, and build configuration for the Pinpoint APM system
  • agent-module/agent-plugins/proxy-common/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy — Core proxy plugin abstraction layer that all proxy implementations (Apache, App) extend from, foundational to request tracing
  • agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParser.java — Reference implementation for parsing Apache proxy headers, serves as template for other proxy header parsers
  • .github/workflows/maven.yml — Primary CI/CD pipeline definition for building, testing, and validating all code changes across the distributed system
  • BUILD.md — Comprehensive build instructions and environment setup guide essential for contributors to compile and test locally
  • CONTRIBUTING.md — Guidelines and standards for code contributions, pull request process, and testing requirements
  • .claude/rules/build.md — Project-specific build rules and conventions that contributors must follow when modifying the codebase

🛠️How to make changes

Add a new Proxy Plugin Type

  1. Create a new module under agent-module/agent-plugins (e.g., proxy-nginx) mirroring the proxy-apache structure (agent-module/agent-plugins/proxy-apache/pom.xml)
  2. Implement ProxyRequestMetadataProvider interface to extract headers specific to your proxy type (agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestMetadataProvider.java)
  3. Implement ProxyRequestParser interface with logic to parse your proxy's header format (agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParser.java)
  4. Register both implementations via SPI configuration files in META-INF/services (agent-module/agent-plugins/proxy-apache/src/main/resources/META-INF/services/com.navercorp.pinpoint.agent.plugin.proxy.common.ProxyRequestMetadataProvider)
  5. Add unit tests following the pattern in ApacheRequestParserTest.java to verify header parsing (agent-module/agent-plugins/proxy-apache/src/test/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParserTest.java)

Extend Proxy Header Detection Logic

  1. Define new header constants in the proxy-specific constants class (e.g., ApacheRequestConstants) (agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestConstants.java)
  2. Add parsing logic in the corresponding RequestParser to extract and validate the new headers (agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParser.java)
  3. Update the enum of request types if introducing a new header category (agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestType.java)
  4. Add test cases covering the new header parsing scenarios (agent-module/agent-plugins/proxy-apache/src/test/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParserTest.java)

Update Build Dependencies

  1. Modify the root pom.xml to add or update Maven dependencies used across all modules (pom.xml)
  2. Update module-specific pom.xml (e.g., proxy-apache/pom.xml) for plugin-only dependencies (agent-module/agent-plugins/proxy-apache/pom.xml)
  3. Verify Maven build succeeds by running the maven.yml workflow locally or checking GitHub Actions (.github/workflows/maven.yml)

🔧Why these technologies

  • Java Bytecode Instrumentation (Agent Pattern) — Enables non-invasive tracing of distributed systems by instrumenting application code at load time without modifying source
  • Service Provider Interface (SPI) / Java ServiceLoader — Allows dynamic plugin discovery and loading of proxy implementations without tight coupling, enabling extension without core modification
  • Maven Multi-Module Build — Organizes proxy plugins as separate, independently deployable modules sharing common interfaces via proxy-common
  • GitHub Actions CI/CD — Provides automated testing, building, and validation on every commit across all agent-plugins to catch integration issues early

⚖️Trade-offs already made

  • Separate proxy plugins (Apache, App) rather than unified parser

    • Why: Different proxy types have different header formats and metadata structures requiring specialized parsing logic
    • Consequence: More code duplication between plugins but cleaner separation of concerns and easier to maintain proxy-specific logic
  • SPI-based plugin discovery at runtime rather than compile-time reflection

    • Why: Decouples plugin implementations from core agent, allowing new proxy types to be added without recompiling the agent
    • Consequence: Slightly higher startup overhead for ServiceLoader initialization but provides extensibility without rebuilding agent JAR
  • Header-parsing logic in agent plugins rather than collector-side

    • Why: Reduces network traffic by normalizing proxy metadata at source before sending to collector
    • Consequence: Increases agent memory footprint and processing per-request but reduces backend load for high-volume systems

🚫Non-goals (don't propose these)

  • Real-time streaming of all trace events (batched/async collection model)
  • Live code modification without restart (agent initialization is at JVM startup)
  • Support for non-JVM languages in this module (PHP/Python agents are separate repositories)
  • Database management or long-term trace storage (handled by separate Pinpoint collector/backend)

🪤Traps & gotchas

Agent bytecode instrumentation is JVM-version-sensitive: ensure JDK version in .mvn/wrapper/maven-wrapper.properties matches target application runtime. Thrift protocol changes require coordinating agent and collector versions (no automatic negotiation visible). Agent attachment requires -javaagent flag at JVM startup—cannot be added dynamically to running processes. Plugin interceptor registration is likely order-dependent (seen in proxy-apache pattern); test initialization sequence. Web UI assumes backend services running on fixed ports (check application.properties/config files not shown in file list).

🏗️Architecture

💡Concepts to learn

  • Bytecode Instrumentation & Runtime Weaving — Pinpoint's core capability: agent-module modifies running code without source changes via Java instrumentation API; essential to understand how ApacheRequestParser plugins intercept method calls and extract trace data
  • Distributed Request Tracing (Dapper Model) — The fundamental design: traces follow requests across service boundaries with span hierarchy and parent-child relationships; Pinpoint's architecture revolves around this concept for topology mapping
  • Thrift RPC & Protocol Versioning — Agents communicate with collectors via Thrift (visible in file counts: 234 lines); understanding serialization and version compatibility is critical for agent-server integration and safe upgrades
  • Agent Plugin Architecture & Interceptor Pattern — Pinpoint extends to new frameworks via plugins (proxy-apache shows RequestMetadataProvider, RequestParser pattern); understand this to add support for custom or new libraries
  • Ring Buffers for Lock-Free Data Collection — APM systems at scale use ring buffers to minimize contention when recording millions of spans; Pinpoint likely uses this pattern internally for <3% performance overhead claim
  • Topology Inference from Request Tracing — ServerMap feature (mentioned in README) infers service dependencies and call graphs from collected traces; foundational for visualization and dependency analysis
  • JVM Instrumentation & Class Loading Constraints — Agent bytecode modifications must work across different JVM versions, garbage collectors, and classloaders; affects plugin stability and why version constraints matter
  • pinpoint-apm/pinpoint-kubernetes — Official Kubernetes deployment patterns and Helm charts for running Pinpoint in containerized environments—directly referenced in README
  • pinpoint-apm/pinpoint-c-agent — PHP and Python agent implementations using C extensions; necessary if monitoring non-Java applications in same distributed system
  • elastic/apm-server — Competing open-source APM platform with similar distributed tracing goals; useful for evaluating design tradeoffs (ES-native storage vs Pinpoint's approach)
  • jaegertracing/jaeger — CNCF distributed tracing standard (OpenTelemetry-aligned); understand how Pinpoint's Dapper-inspired approach differs from standardized tracing protocols
  • google/dapper — Original 2010 Google Dapper paper that inspired Pinpoint's architecture; foundational for understanding transaction tracing concepts

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add comprehensive integration tests for proxy plugin providers

The proxy-apache and proxy-app plugins use Java SPI (Service Provider Interface) with META-INF/services files, but there's only one test file (ApacheRequestParserTest.java). Missing are integration tests verifying that ApacheRequestMetadataProvider and ApacheRequestParserProvider are correctly discovered and instantiated via SPI, and tests for proxy-app's equivalent providers. This is critical since misconfigured SPI files silently fail in production APM deployments.

  • [ ] Create agent-module/agent-plugins/proxy-apache/src/test/java/.../ApacheRequestMetadataProviderTest.java to verify SPI discovery
  • [ ] Create agent-module/agent-plugins/proxy-apache/src/test/java/.../ApacheRequestParserProviderTest.java to test provider instantiation
  • [ ] Create equivalent provider tests for proxy-app plugin to ensure consistency across proxy implementations
  • [ ] Add tests that verify META-INF/services files are correctly packaged in JAR output

Add GitHub Actions workflow to validate SPI service descriptors

Currently there's no CI step validating that all META-INF/services files have correct class names and that listed classes actually exist in the codebase. This prevents SPI configuration errors from being caught early. A specific workflow should check that every service provider entry points to an existing, instantiable class.

  • [ ] Create .github/workflows/validate-spi-descriptors.yml workflow
  • [ ] Implement Maven plugin or shell script to scan all agent-module/agent-plugins//src/main/resources/META-INF/services/ files
  • [ ] Validate each service provider class exists and is accessible in the compiled output
  • [ ] Add step to run during both pull requests and main branch builds (reference maven.yml structure)

Create proxy plugin testing utilities and shared test base classes

Both proxy-apache and proxy-app plugins implement similar request parsing logic but don't share test utilities. Creating shared test fixtures and base test classes (e.g., AbstractProxyRequestParserTest) would reduce duplication and make it easier to add tests for other proxy types. Currently ApacheRequestParserTest has no companion utilities that could be reused.

  • [ ] Create agent-module/agent-plugins/proxy-apache/src/test/java/.../fixtures/ApacheRequestTestFixtures.java with sample request payloads
  • [ ] Create agent-module/agent-plugins/proxy-apache/src/test/java/.../AbstractProxyRequestParserTest.java as reusable test base
  • [ ] Refactor ApacheRequestParserTest.java to extend the abstract base class
  • [ ] Document patterns in agent-module/agent-plugins/README.md for contributors adding new proxy plugins

🌿Good first issues

  • Add request/response logging plugin for common HTTP client libraries (OkHttp, HttpClient, etc.) following the proxy-apache/ pattern—extend ApacheRequestParser.java and create corresponding plugin module with proper Maven POM inheritance.
  • Improve test coverage for existing agent plugins: notice ApacheRequestConstants.java, ApacheRequestMetadataProvider.java, and ApacheRequestParser.java lack visible test files in proxy-apache/src/test/; write unit tests for HTTP header parsing edge cases.
  • Document the ApacheRequestParserProvider pattern in CONTRIBUTING.md with a worked example—critical for new contributors but not currently explained in visible docs; add code comments explaining metadata extraction flow.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • e95b1d6 — [#noissue] Apply limit with ties to TraceIndexDao (donghun-cho)
  • d6c8bad — [#noissue] Remove MapProperties dependency from forServerMap factories (emeroad)
  • b7ae188 — [#noissue] Apply timeout to AsyncEchoTestClient await (emeroad)
  • 60502b3 — [#noissue] Exclude htrace from hbase plugin dependencies (emeroad)
  • d47dd28 — [#noissue] Replace CountDownLatch callback with CompletableFuture in AsyncEchoTestClient (emeroad)
  • d500e21 — [#noissue] Fix thrift-plugin-testweb compile errors for newer libthrift (emeroad)
  • b3affb2 — [#noissue] Inherit libthrift version in thrift-plugin-testweb (emeroad)
  • b5ef3bf — [#noissue] Use empty timeseries histogram view for server/service map (emeroad)
  • 23b7822 — [#noissue] Introduce SpanId class for null span id constant (emeroad)
  • 50e3587 — [#noissue] Use default return values for unimplemented methods (donghun-cho)

🔒Security observations

The Pinpoint APM project shows a generally mature structure with modular design using Maven and service loaders. However, several security concerns exist: (1) A public demo instance is directly exposed via IP address without apparent protection, posing availability and confidentiality risks; (2) Limited visibility into input validation practices in request parsing components; (3) Incomplete documentation of security practices and vulnerability disclosure process; (4) Plugin loading mechanism lacks apparent integrity verification. The project should strengthen security documentation, implement API security controls on publicly exposed instances, and add dependency vulnerability scanning to the CI/CD pipeline. No hardcoded credentials or obvious injection vulnerabilities are evident from the file structure alone, but implementation details should be reviewed for security best practices.

  • Medium · Exposed Live Demo with Public IP — README.md - Live Demo section. The README contains a live demo link with a public IP address (223.130.142.103:8080) that may expose the application to direct attacks. This public endpoint could be targeted for DoS attacks, data theft, or reconnaissance. Fix: Use a domain name with DDoS protection instead of a raw IP address. Implement rate limiting, WAF rules, and access controls on the demo instance. Consider using an IP whitelist or requiring authentication for the demo environment.
  • Low · Incomplete Dependency Declaration — agent-module/agent-plugins/agent-plugins-parent/pom.xml. The pom.xml file for pinpoint-agent-plugins-parent has an empty dependencies section. While not a direct security issue, this may indicate incomplete dependency management, which could lead to transitive dependency vulnerabilities being overlooked. Fix: Review and explicitly declare all required dependencies with their versions. Use dependency management to control transitive dependencies and regularly audit for known vulnerabilities using tools like OWASP Dependency-Check or Maven Enforcer Plugin.
  • Low · Missing Security Headers Documentation — Project root configuration files. The codebase lacks visible security configuration documentation. APM tools collect sensitive application performance data and should enforce strict security controls. Fix: Document security headers (HSTS, CSP, X-Frame-Options, X-Content-Type-Options) for the web UI. Implement authentication/authorization mechanisms for the APM dashboard. Add security.md or SECURITY.md with vulnerability disclosure policy.
  • Low · Service Loader Files Without Integrity Verification — agent-module/agent-plugins/*/src/main/resources/META-INF/services/. The META-INF/services files for plugin discovery could be manipulated to load malicious plugin implementations. There's no apparent integrity verification mechanism visible in the structure. Fix: Implement code signing for JAR files. Use digital signatures to verify plugin integrity before loading. Restrict plugin search paths to trusted locations. Consider using a plugin whitelist approach.
  • Low · Proxy Request Parsing Without Input Validation Visibility — agent-module/agent-plugins/proxy-apache/src/main/java/com/navercorp/pinpoint/agent/plugin/proxy/apache/ApacheRequestParser.java. The ApacheRequestParser and AppRequestParser classes handle proxy request metadata. Without seeing the implementation, potential parsing vulnerabilities (HTTP header injection, request smuggling) may exist. Fix: Implement strict input validation for all proxy headers. Use established libraries for HTTP parsing. Test for HTTP request smuggling vulnerabilities (CL.TE, TE.CL). Validate and sanitize all extracted metadata before use.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.