apolloconfig/apollo
Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.
Healthy across the board
weakest axisPermissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 6d ago
- ✓32+ active contributors
- ✓Distributed ownership (top contributor 36% of recent commits)
Show all 6 evidence items →Show less
- ✓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.
[](https://repopilot.app/r/apolloconfig/apollo)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/apolloconfig/apollo on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: apolloconfig/apollo
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:
- 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. - 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.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/apolloconfig/apollo 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 6d ago
- 32+ active contributors
- Distributed ownership (top contributor 36% 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 apolloconfig/apollo
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/apolloconfig/apollo.
What it runs against: a local clone of apolloconfig/apollo — 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 apolloconfig/apollo | 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 ≤ 36 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of apolloconfig/apollo. If you don't
# have one yet, run these first:
#
# git clone https://github.com/apolloconfig/apollo.git
# cd apollo
#
# 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 apolloconfig/apollo and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "apolloconfig/apollo(\\.git)?\\b" \\
&& ok "origin remote is apolloconfig/apollo" \\
|| miss "origin remote is not apolloconfig/apollo (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 "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java" \\
&& ok "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java" \\
|| miss "missing critical file: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java"
test -f "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseController.java" \\
&& ok "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseController.java" \\
|| miss "missing critical file: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseController.java"
test -f "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemController.java" \\
&& ok "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemController.java" \\
|| miss "missing critical file: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemController.java"
test -f "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java" \\
&& ok "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java" \\
|| miss "missing critical file: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java"
test -f "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java" \\
&& ok "apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java" \\
|| miss "missing critical file: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 36 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~6d)"
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/apolloconfig/apollo"
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).
⚡TL;DR
Apollo is a production-grade, centralized configuration management system for microservices built on Spring Boot and Spring Cloud. It enables real-time, hot-reload configuration updates across multiple environments and clusters without redeployment, with SDKs available for Java, .NET, and JavaScript that push changes to clients automatically. Monorepo structure: apollo-adminservice/ is one of multiple core modules, depends on apollo-biz and apollo-audit-spring-boot-starter (both at /), indicating layered architecture. Java backend (Spring Boot) in src/main/java/com/ctrip/framework/apollo/, JavaScript frontend separate (553K files), Docker images built per-service (apollo-adminservice/src/main/docker/Dockerfile). Assembly descriptor (assembly-descriptor.xml) suggests distribution packaging.
👥Who it's for
DevOps engineers and backend teams at large enterprises managing dozens of microservices across multiple environments (dev/staging/prod/clusters) who need to update configurations without restarting applications. Java Spring Boot developers building microservice architectures that require dynamic configuration without hard-coded values.
🌱Maturity & risk
Highly mature and production-ready. Codebase is 2.9MB of Java with 550K+ JavaScript in frontend, comprehensive CI/CD via GitHub Actions (build, tests, Docker publishing, e2e tests), active release pipeline (release-packages.yml), and clear governance structure. Actively maintained with recent workflow additions for code style, CodeQL security scanning, and portal UI e2e tests indicating ongoing development.
Low risk for adoption; enterprise-grade with Apache 2.0 license and governance model (GOVERNANCE.md). Risk surface includes: Spring Cloud/Eureka tight coupling (visible in apollo-adminservice pom.xml), multi-language SDK maintenance burden (Java, JavaScript, .NET), and database schema coupling for multi-cluster deployments. No obvious single-point-of-failure or abandoned signals; consistent CI execution visible.
Active areas of work
Active maintenance: recent additions of CodeQL security scanning, commit lint enforcement, portal login e2e tests (portal-login-e2e.yml), Docker validation workflows, and external discovery smoke tests. License and code-style checks are automated. Pull request template and issue triage workflows (mergify.yml) indicate mature community management.
🚀Get running
Clone: git clone https://github.com/apolloconfig/apollo.git && cd apollo. Build: mvn clean package (Maven wrapper at .mvn/wrapper/). The pom.xml structure shows this is a multi-module Maven project. Run AdminService: java -jar apollo-adminservice/target/apollo-adminservice-*.jar after building. See Quick Start in official docs at https://www.apolloconfig.com/#/zh/deployment/quick-start.
Daily commands:
Development: mvn clean install in repo root to build all modules. Start ConfigService and AdminService separately (each with its own Spring Boot entrypoint). Database: requires MySQL with Apollo schema (initialized via provided SQL scripts in docs/sql/). Environment: Set apollo.portal.envs=dev,pro and other config via application-dev.properties. Production: Use provided Dockerfile in each module (apollo-adminservice/src/main/docker/Dockerfile) with docker build && docker run, or use release packages from GitHub releases.
🗺️Map of the codebase
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java— Main entry point for Apollo Admin Service; essential for understanding application bootstrap and lifecycleapollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ReleaseController.java— Core REST endpoint handling configuration release operations; critical path for config deploymentapollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemController.java— Configuration item CRUD operations; foundation for all config managementapollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java— Distributed lock mechanism for namespace changes; prevents concurrent modification conflictsapollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java— Spring Boot auto-configuration setup; configures beans and service dependenciesapollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilter.java— Security filter for API authentication and authorization; protects configuration accessapollo-adminservice/pom.xml— Maven dependencies and build configuration; defines all project requirements and plugins
🛠️How to make changes
Add a new configuration management endpoint
- Create a new REST controller in the controller package, extending Spring's @RestController (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/) - Define endpoint mapping with @RequestMapping and specific HTTP method annotations (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ItemController.java) - If the operation modifies configuration state, add @PreAcquireNamespaceLock annotation to acquire distributed lock (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/PreAcquireNamespaceLock.java) - Create corresponding unit tests in test directory following AbstractControllerTest pattern (
apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/AbstractControllerTest.java) - Add authentication rules in AdminServiceAuthenticationFilter if endpoint requires specific permissions (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilter.java)
Implement a distributed locking mechanism for concurrent operation safety
- Define locking requirement using @PreAcquireNamespaceLock annotation on controller method (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/PreAcquireNamespaceLock.java) - Create AOP Aspect class extending AspectJ to intercept annotated methods (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java) - Implement before-advice to acquire lock with retry logic and timeout handling (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceAcquireLockAspect.java) - Create unlock aspect for after-returning or after-throwing to guarantee release (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java) - Add unit tests verifying lock acquisition and release behavior (
apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockTest.java)
Add security authentication for a new API endpoint
- Review current authentication filter implementation and token/access key validation logic (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilter.java) - Extend or modify doFilter method to add endpoint-specific authorization checks (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilter.java) - Reference AccessKeyController to understand access key management and validation patterns (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AccessKeyController.java) - Register filter in application configuration or web security configuration if using Spring Security (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java)
Extend application startup with custom initialization logic
- Review AdminServiceAutoConfiguration for Spring bean registration patterns (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java) - Create new @Configuration class or add @Bean methods to AdminServiceAutoConfiguration (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceAutoConfiguration.java) - Implement ApplicationRunner or CommandLineRunner interface for startup initialization (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java) - Add health check logic in AdminServiceHealthIndicator if monitoring integration needed (
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceHealthIndicator.java)
🪤Traps & gotchas
Database requirement: Apollo requires MySQL (no embedded fallback). Schema must be initialized before startup—see docs/sql/ for initialization scripts. Eureka registration: AdminService registers with Eureka; ConfigService must be able to discover it. Set eureka.client.serviceUrl.defaultZone correctly or service discovery fails. Multi-cluster setup: Different clusters need separate database instances or careful namespace isolation; this is not obvious from single-module view. Version alignment: Parent pom.xml uses ${revision} placeholder—Maven must resolve this; standard CI handles it, but local builds might fail without proper setup. Port conflicts: Default ports (8080, 8070, 8060 for different services) must be free. No embedded demo DB: Even quick-start requires external MySQL; Docker Compose configs are in docs/compose or quickstart folder, not in root.
🏗️Architecture
💡Concepts to learn
- Hot Release / Live Configuration Push — Apollo's core differentiator—ability to push config changes to running applications without restart. Critical to understand pub-sub mechanism, change notification flow, and client-side override semantics.
- Configuration Namespace Isolation — Apollo organizes configs into environments, clusters, and namespaces. Without understanding namespace hierarchies and inheritance, you'll misconfigure multi-app deployments or create name collisions.
- Service Discovery via Eureka — AdminService, ConfigService, and Portal auto-register with Netflix Eureka for mutual discovery. Spring Cloud Eureka client setup in pom.xml and application.properties is non-optional—misconfiguration causes cascading failures.
- Multi-Cluster Configuration Propagation — Apollo can replicate configs across data centers and clusters. Requires understanding of cluster metadata, regional databases, and eventual consistency semantics—critical for global deployments.
- Configuration Audit Trail & Version Control — apollo-audit-spring-boot-starter dependency indicates all config changes are logged with who, when, and what changed. Compliance and rollback requires understanding audit schema and version numbering.
- Client-Side Configuration Override & Fallback — Java/JS SDKs cache configs locally and fall back to cached version if server is unreachable. Must understand cache invalidation, local properties file override precedence, and eventual consistency guarantees to avoid stale data bugs.
- Spring Boot Externalized Configuration Binding — Apollo integrates with Spring Boot's @ConfigurationProperties and @Value annotations. Requires understanding how Apollo's PropertySource registers with Spring's Environment to enable dynamic injection and auto-refresh.
🔗Related repos
alibaba/nacos— Direct competitor in dynamic config management; NACOS is more tightly integrated with Spring Cloud and Kubernetes, but Apollo is stronger in multi-cluster and hot-reload guaranteeshashicorp/consul— Alternative centralized config + service discovery platform; Consul is language-agnostic and stronger in distributed consensus (Raft), but Apollo is easier for Java Spring Boot teamsapolloconfig/apollo-java-client— Official Java SDK for consuming Apollo configs in client applications; essential companion for any Apollo userapolloconfig/apollo-net— Official .NET SDK for consuming Apollo configs; allows Apollo to serve non-Java microservices in polyglot deploymentsspring-cloud/spring-cloud-config— Spring Cloud native config server; lighter than Apollo but lacks hot-reload, multi-environment UI, and Eureka integration in the same package
🪄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 NamespaceLockController with AOP aspects
The apollo-adminservice has a critical locking mechanism for namespace management (PreAcquireNamespaceLock, NamespaceAcquireLockAspect, NamespaceUnlockAspect) but there's no visible test coverage for the interaction between NamespaceLockController and these AOP aspects. Given that configuration locks are critical for preventing concurrent modifications, integration tests would ensure the locking flow works correctly under concurrent scenarios and edge cases.
- [ ] Create apollo-adminservice/src/test/java/.../controller/NamespaceLockControllerTest.java
- [ ] Add tests for successful lock acquisition with @PreAcquireNamespaceLock validation
- [ ] Add tests for concurrent lock attempts and deadlock scenarios
- [ ] Add tests for NamespaceUnlockAspect cleanup when exceptions occur
- [ ] Verify interaction between NamespaceAcquireLockAspect and business logic
Add GitHub Actions workflow for apollo-adminservice Docker image validation and smoke tests
The repo has docker-validation.yml and external-discovery-smoke.yml workflows, but there's no specific validation workflow for the apollo-adminservice Docker image build and its admin API endpoints. This is critical since apollo-adminservice is the core management service. A dedicated workflow would catch Docker build failures, API regressions, and health indicator issues early.
- [ ] Create .github/workflows/adminservice-docker-validation.yml
- [ ] Add Docker build step for apollo-adminservice/src/main/docker/Dockerfile
- [ ] Add smoke tests that verify AdminServiceHealthIndicator endpoints respond correctly
- [ ] Add API endpoint validation tests for core controllers (AppController, NamespaceController, ReleaseController)
- [ ] Integrate with existing build.yml or create dependency chain
Add unit tests for AccessKeyController and ItemSetController with security/authorization validation
The repository has security and audit capabilities (SECURITY.md exists, apollo-audit-spring-boot-starter is a dependency), but AccessKeyController and ItemSetController lack visible test files. These controllers handle sensitive operations (access key management and bulk item operations) that require authorization checks. Adding tests would ensure security validations are working and document expected authorization behavior.
- [ ] Create apollo-adminservice/src/test/java/.../controller/AccessKeyControllerTest.java
- [ ] Create apollo-adminservice/src/test/java/.../controller/ItemSetControllerTest.java
- [ ] Add tests for access key creation/deletion with proper authorization checks
- [ ] Add tests for ItemSetController bulk operations with transaction boundary validation
- [ ] Add tests verifying audit logging is triggered for sensitive operations
🌿Good first issues
- Add unit tests for AdminServiceApplication startup flow: apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplication.java has no obvious test class. Contribution: add test/java/com/ctrip/framework/apollo/adminservice/AdminServiceApplicationTests.java to verify Spring context loads correctly and Eureka registration doesn't fail silently.
- Document environment variable requirements in README: README.md snippet shows 'Quick Start' link but doesn't list mandatory env vars (DB_HOST, DB_USER, etc.). Contribution: add 'Configuration Reference' section listing all required environment variables with defaults and examples, e.g.,
APOLLO_DB_URL,EUREKA_SERVER_URL. - Add health check endpoint docs and tests: No visible /health or /actuator/health endpoint documented in README, but Spring Boot Actuator is likely included. Contribution: verify Apollo services expose health endpoints, document them, and add integration test in apollo-adminservice test suite to ensure Kubernetes/Docker orchestrators can probe readiness.
⭐Top contributors
Click to expand
Top contributors
- @nobodyiam — 36 commits
- @tacklequestions — 9 commits
- @spaceluke — 7 commits
- @youngzil — 6 commits
- @arrow1991 — 6 commits
📝Recent commits
Click to expand
Recent commits
65903a7— ci(mergify): upgrade configuration to current format (mergify[bot])57000ad— build(deps): bump com.sun.mail:jakarta.mail from 2.0.1 to 2.0.2 (dependabot[bot])7daf306— 新建应用时按环境自动创建并启用 AccessKey(Auto-provision) (#5589) (youngzil)3658773— feat!: migrate apollo server baseline to spring boot 4.0.x (#5585) (nobodyiam)56e4821— refactor(config): 重构配置类中的常量定义和方法实现 (#5583) (youngzil)bcd6080— Default new installs to database discovery (#5580) (nobodyiam)4c527a4— Add edge case tests for NamespaceService.loadNamespaceBO (#5574) (lmj798)0bb7ade— feat!: migrate apollo server baseline to spring boot 3.5.10 (nobodyiam)dae91b5— fix: include super admin in hasAnyPermission semantics (#5568) (nobodyiam)7723158— docs: remove QA bot embed and refine AGENTS guidance (nobodyiam)
🔒Security observations
- High · Missing Authentication Filter Coverage —
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/filter/AdminServiceAuthenticationFilter.java. The AdminServiceAuthenticationFilter exists but the file structure shows multiple controllers (AccessKeyController, AppController, etc.) that handle sensitive operations like configuration management, releases, and namespace operations. Without visibility into filter configuration, there's a risk of unprotected endpoints. Fix: Ensure all sensitive endpoints are protected by the authentication filter. Verify filter configuration covers all controller paths and implement proper authorization checks beyond authentication. - High · Potential Insecure Deserialization in BIZ Module —
apollo-adminservice/pom.xml - apollo-biz dependency. The dependency on apollo-biz is included without detailed visibility into its implementation. Configuration management systems often handle serialized objects; insecure deserialization could lead to RCE vulnerabilities. Fix: Audit apollo-biz module for unsafe deserialization patterns. Use whitelisting for deserialization, avoid ObjectInputStream with untrusted data, and keep serialization libraries updated. - High · Incomplete Maven Dependency Declaration —
apollo-adminservice/pom.xml. The pom.xml file is truncated at the spring-cloud-starter-netflix-ribbon exclusion, making it impossible to verify all dependencies are properly declared and vetted for known vulnerabilities. Fix: Complete the dependency declaration and run 'mvn dependency-check' or use OWASP Dependency-Check plugin to identify vulnerable dependencies. Enable security scanning in CI/CD pipeline. - Medium · Potential SQL Injection in Data Access Layer —
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ (ItemController, ReleaseController, NamespaceController, etc.). While not visible in the file structure provided, configuration management systems typically interact with databases. Controllers for Items, Releases, and Namespaces suggest database operations that could be vulnerable to SQL injection if parameterized queries are not consistently used. Fix: Ensure all database queries use prepared statements and parameterized queries. Implement input validation and sanitization. Use an ORM framework properly configured to prevent SQL injection. - Medium · Cross-Site Scripting (XSS) Risk in Configuration Values —
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ - All controllers returning configuration data. A configuration management system handles user-supplied configuration values that may be displayed in UI (portal) components. Insufficient output encoding could lead to XSS vulnerabilities. Fix: Implement proper output encoding for all configuration values displayed in UI. Use HTML entity encoding, validate and sanitize user inputs, implement Content Security Policy (CSP) headers. - Medium · Insufficient Access Control on Administrative Endpoints —
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/ - ReleaseController, NamespaceLockController, AccessKeyController. The ReleaseController, NamespaceLockController, and AccessKeyController handle critical operations. No visibility into role-based access control (RBAC) or fine-grained authorization mechanisms. Fix: Implement role-based access control (RBAC) with principle of least privilege. Require explicit authorization checks for all administrative operations. Log all sensitive actions for audit trails. - Medium · Potential Insecure Direct Object References (IDOR) —
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/. Controllers handling app, cluster, namespace, and instance data by ID suggest potential IDOR vulnerabilities if authorization is not properly validated per resource. Fix: Implement per-resource authorization checks before returning data. Verify user has appropriate access to the requested resource, not just that they are authenticated. - Medium · Missing Security Headers Configuration —
apollo-adminservice/src/main/resources/application.properties, application.yml, application-*.properties. No visible configuration for security headers (X-Frame-Options, X-Content-Type-Options, Strict-Transport-Security, etc.) in the application properties or filter implementations. Fix: Configure security headers via Spring Security or servlet
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.