Skip to content

Conversation

@serj
Copy link
Owner

@serj serj commented Dec 13, 2025

Allow to lock a libraries or application's capabilities during runtime. For now, it's on package level but possible to even go on jar level for later.

serj added 6 commits December 12, 2025 23:38
Introduces jcapslock-agent module for runtime capability detection and policy enforcement:

- CapslockAgent: Java agent entry point, instruments JDK classes at startup
- CapabilityTransformer: ASM-based bytecode transformer for capability methods
- PolicyChecker: Stack inspection and policy enforcement with YAML config support

Features:
- Log-only mode: monitors capability usage with full stack traces
- Policy mode: blocks capabilities for specific packages via SecurityException
- Uses capability mappings from core module (java-interesting.cm)

Also:
- Add dependency-reduced-pom.xml to .gitignore
- Disable AssignmentToForLoopParameter inspection (false positive on i++)
Dependency management:
- Add protobuf.version (4.33.2) and mockito.version properties
- Add asm-commons to parent dependencyManagement
- Remove duplicate maven.plugin.version from maven-plugin module
- Remove unused jetbrains:annotations dependency

Agent fixes:
- Fix classloader null check in CapabilityMapper resource loading
- Remove unused import in CapabilityTransformer
- Add extraArtifacts config to maven-invoker for jcapslock-agent

Policy enforcement:
- Add policy.yaml for quick-test example
- Add BlockedExec test class and PolicyEnforcementTest
- Add test-policy.sh E2E test script
Module restructuring:
- Split core into core/ (lightweight) and core/analysis/ (SootUp)
- Agent depends only on jcapslock-core (5.4MB vs ~20MB)
- Maven plugin depends on jcapslock-core-analysis

Runtime call graph capture:
- Add RuntimeCallGraph for capturing capabilities during test execution
- Add JUnit 5 extension (CapslockCallGraphExtension) for test integration
- Add CallGraphAssertions for fluent graph assertions in tests
- Add GraphMerger utility for combining Graph protos

Refactoring:
- Extract SootUp-specific methods from GraphProtoBuilder to SootGraphBuilder
- Move CallGraphBuilder, ImplicitCapabilityDetector, UnifiedAnalyzer to analysis module
- Use --release 17 instead of source/target for cleaner compilation
- Fix shade plugin manifest handling
- Rename package from com.test to com.github.serj.jcapslock.examples.quicktest
- Switch from exec-maven-plugin to maven-failsafe-plugin for integration tests
- Add -Djdk.attach.allowAttachSelf=true to surefire argLine
- Update policy.yaml and snapshot.json for new package structure
@serj serj changed the title Runtime checks WiP Add runtime enforcement MVP Dec 15, 2025
@serj serj merged commit 4fa1c6e into main Dec 15, 2025
1 check passed
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.

2 participants