mirror of
https://github.com/elicpeter/nyx.git
synced 2026-06-09 19:45:13 +02:00
refactor(dynamic): replace reflective invocation with route replay logic for Micronaut and Quarkus, remove annotation stubs, and enhance runtime path binding
This commit is contained in:
parent
61bfc0cf96
commit
41c7b73575
26 changed files with 1256 additions and 224 deletions
|
|
@ -1,4 +1,4 @@
|
|||
// Phase 14 — Micronaut `@Controller`, benign.
|
||||
// Micronaut `@Controller`, benign.
|
||||
//
|
||||
// Same shape as the vuln but echoes a constant string instead of
|
||||
// concatenating the path variable into a shell command.
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
// Phase 14 fixture stub — minimal Micronaut `@Controller`.
|
||||
// Lives in `io.micronaut.http.annotation` so the fixture's
|
||||
// `import io.micronaut.http.annotation.Controller;` compiles under
|
||||
// plain javac (no Micronaut Maven dep required).
|
||||
|
||||
package io.micronaut.http.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface Controller {
|
||||
String value() default "";
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
// Phase 14 fixture stub — minimal Micronaut `@Get`.
|
||||
|
||||
package io.micronaut.http.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
public @interface Get {
|
||||
String value() default "";
|
||||
}
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
// Phase 14 — Micronaut `@Controller`, vulnerable.
|
||||
// Micronaut `@Controller`, vulnerable.
|
||||
//
|
||||
// `@Controller("/run")` on the class + `@Get("/{id}")` on the handler
|
||||
// matches the Phase 14 [`JavaShape::MicronautRoute`]. The harness
|
||||
// invokes `show(payload)` via reflection.
|
||||
// matches `JavaShape::MicronautRoute`. The harness keeps the real
|
||||
// Micronaut annotations on the classpath and replays the route through
|
||||
// those annotations.
|
||||
|
||||
import io.micronaut.http.annotation.Controller;
|
||||
import io.micronaut.http.annotation.Get;
|
||||
|
|
|
|||
|
|
@ -14,5 +14,10 @@
|
|||
<artifactId>micronaut-http</artifactId>
|
||||
<version>4.4.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.micronaut</groupId>
|
||||
<artifactId>micronaut-core</artifactId>
|
||||
<version>4.4.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
// Phase 14 — Quarkus reactive route, benign.
|
||||
// Quarkus reactive route, benign.
|
||||
|
||||
// import io.quarkus.runtime.Quarkus;
|
||||
import io.quarkus.runtime.Quarkus;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
// Phase 14 fixture stub — minimal `@GET` Jakarta REST annotation.
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
public @interface GET {
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
// Phase 14 fixture stub — minimal `@Path` annotation (Jakarta REST).
|
||||
// Lives in the default package; the fixture imports the symbol as
|
||||
// plain `@Path` so javac is happy without a Quarkus / Jakarta REST
|
||||
// Maven dep.
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
public @interface Path {
|
||||
String value() default "";
|
||||
}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
// Phase 14 — Quarkus reactive route, vulnerable.
|
||||
//
|
||||
// `@Path("/run")` on the type + `@GET` on the handler matches the
|
||||
// Phase 14 [`JavaShape::detect`] for Quarkus. The harness invokes
|
||||
// `run(payload)` via reflection.
|
||||
// Quarkus reactive route, vulnerable. The harness keeps the real
|
||||
// Jakarta REST annotations on the classpath and replays the route
|
||||
// through those annotations.
|
||||
|
||||
// import io.quarkus.runtime.Quarkus;
|
||||
import io.quarkus.runtime.Quarkus;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
|
|
|||
|
|
@ -14,5 +14,10 @@
|
|||
<artifactId>quarkus-resteasy-reactive</artifactId>
|
||||
<version>3.8.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.ws.rs</groupId>
|
||||
<artifactId>jakarta.ws.rs-api</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue