github / github/copilot-cli

Sandbox RW path grants not honored by JVM processes spawned from Copilot CLI

Ouverte
#4,516 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

area:permissions
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
  1. In /sandbox, confirm ~/.m2/repository (or any path) is granted Read/Write.

  2. 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

  3. Compile and run a minimal Java program that writes a file under the same granted path via NIO:

     mkdir -p ~/.m2/repository/zz-test-dir
    
    import 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
    
  4. 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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.