github / github/copilot-cli

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

Aperta
#4,516 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

area:permissions
Lingua principale
Shell
Stelle
11.2k
Fork
1.9k
Merge medio
14h 16m
PR unite (30g)
6

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo il contrasto tra le scritture della shell e l'esempio Java NIO FileChannel.open in un percorso autorizzato tramite /sandbox. Traccia l'applicazione del controllo di accesso ai file del sandbox per i processi JVM avviati e confrontala con i comandi della shell. Il lavoro è completato quando la scrittura Java ha esito positivo e mvn clean compile può scrivere in ~/.m2/repository senza Operation not permitted.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java, shell
Ambito
cli, security
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
50/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.