jmestwa-coder opened a new issue, #12427:
URL: https://github.com/apache/maven/issues/12427

   ### Affected version
   
   4.1.0-SNAPSHOT (master); the compat maven-model-builder validator has the 
same gap.
   
   ### Bug description
   
   coordinate ids and versions equal to `.` or `..` pass model validation:
   
   - `isValidCoordinatesId` (maven-impl `DefaultModelValidator`) / `isValidId` 
(compat) check each character individually and `.` is an allowed character, so 
the strings `.` and `..` are accepted as groupId/artifactId
   - `validateVersion` only bans the filesystem metacharacters `\/:"<>|?*`, so 
a version of `..` passes too
   - same gap in the wildcard-id variant
   
   these values are used verbatim as directory segments when an artifact is 
mapped to its local repository path 
(`groupId-as-dirs/artifactId/version/artifactId-version.ext` in the default 
layout, see `DefaultRepositoryLayout.pathOf`), so an artifactId or version of 
`..` is a literal path-traversal segment.
   
   example: this dependency passes STRICT validation
   
   ```xml
   <dependency>
     <groupId>org.example</groupId>
     <artifactId>..</artifactId>
     <version>1.0</version>
   </dependency>
   ```
   
   and maps to the local-repository path
   
   ```
   org/example/../1.0/..-1.0.jar  ->  org/1.0/..-1.0.jar
   ```
   
   so the `..` segment escapes the coordinate directory. a dependency version 
of `..` does the same one level down (`org/example/lib/../lib-...jar` -> 
`org/example/lib-...jar`). any POM in the dependency graph can carry such 
coordinates.
   
   groupId on its own is not a raw-segment vector since the layout maps its 
dots to path separators (`org..evil` becomes `org//evil`, an empty segment 
rather than `..`), but `.`/`..` as a whole groupId is rejected as well for 
consistency.
   
   fix in #12410: reject `.` and `..` in the id checks, the wildcard variant, 
and `validateVersion`, in both the maven-impl and compat maven-model-builder 
validators, with regression tests in each module.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to