Sandbox RW path grants not honored by JVM processes spawned from Copilot CLI
Personne n'a encore pris cette issue.
- Langage dominant
- Shell
- Étoiles
- 11.2k
- Forks
- 1.9k
- Merge moyen
- 14 h 16 min
- PR mergées (30 j)
- 6
Description
Describe the bug
Summary
Sandbox path RW grants configured via /sandbox (e.g. ~/.m2/repository) are not honored by JVM/Java processes, even though the same path is fully writable for plain shell commands. Any Java-based tool (Maven, javac-compiled programs, etc.) fails with Operation not permitted on file/directory writes under a granted path, blocking real-world workflows like mvn clean compile.
Environment
• CLI version: 1.0.80
• OS: macOS (Darwin), aarch64
• Granted sandbox path: ~/.m2/repository (Read/Write)
Real-world impact
Running mvn clean compile in a multi-module Maven project fails identically — both the cyclonedx-maven-plugin and Maven core's own DefaultTrackingFileManager/DefaultUpdateCheckManager (writing resolver-status.properties for resolved dependency metadata under ~/.m2/repository/...) throw the same FileSystemException: Operation not permitted, even though the parent directories were freshly, successfully created by shell mkdir moments earlier in the same session.
Suspected root cause
The sandbox's file-access enforcement appears to differ by process/executable type rather than purely by path: shell built-ins (touch, mkdir) inherit the granted RW access, but JVM processes (java, and therefore javac, mvn) invoking sun.nio.fs.UnixFileSystemProvider (NIO FileChannel.open/Files.createDirectory) are denied on the identical path/grant.
Affected version
1.0.80
Steps to reproduce the behavior
-
In /sandbox, confirm ~/.m2/repository (or any path) is granted Read/Write.
-
From the CLI's shell tool, confirm plain shell operations succeed on that path:
mkdir -p ~/.m2/repository/zz-test-dir && echo OK # succeeds
touch ~/.m2/repository/zz-test-dir/file.txt && echo OK # succeeds -
Compile and run a minimal Java program that writes a file under the same granted path via NIO:
mkdir -p ~/.m2/repository/zz-test-dirimport java.nio.channels.FileChannel; import java.nio.file.*; import static java.nio.file.StandardOpenOption.*; public class WriteTest { public static void main(String[] args) throws Exception { Path p = Paths.get(System.getProperty("user.home") + "/.m2/repository/zz-test-dir/javatest.properties"); try (FileChannel ch = FileChannel.open(p, CREATE, WRITE)) { System.out.println("JAVA WRITE OK"); } } }javac WriteTest.java && java WriteTest -
Actual result:
Exception in thread "main" java.nio.file.FileSystemException: .../zz-test-dir/javatest.properties: Operation not permitted
at java.base/sun.nio.fs.UnixFileSystemProvider.newFileChannel
at java.base/java.nio.channels.FileChannel.open
at WriteTest.main(WriteTest.java:7)
Expected behavior
"JAVA WRITE OK" printed.
Additional context
No response
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire le contraste entre les écritures du shell et l'exemple Java NIO FileChannel.open sous un chemin autorisé via /sandbox. Suivez l'application du contrôle d'accès aux fichiers du sandbox pour les processus JVM lancés et comparez-la aux commandes du shell. C'est terminé lorsque l'écriture Java réussit et que mvn clean compile peut écrire sous ~/.m2/repository sans Operation not permitted.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java, shell
- Domaine
- cli, security
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 50/100