[ 
https://issues.apache.org/jira/browse/SSHD-605?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15237953#comment-15237953
 ] 

Albert Ho commented on SSHD-605:
--------------------------------

Thanks Guillaume and Goldstein.  I've gotten approval so I'll make a pull 
request or patch.  It looks like the path in 
RootedFileSystemProvider#resolveLocalPath isn't being checked correctly, and I 
was able to fail SftpTest#testCannotEscapeUserRoot using "/.." as path passed 
into sftp.stat(escapePath).  The windows-specific code doesn't address this 
issue.  I also re-tested launching the default sftp server (using sshd-core 
1.2.1) locally and was able to bypass the root.  

See log here: 

Finished 
org.apache.sshd.client.subsystem.sftp.SftpTest:testCannotEscapeUserRoot in 
37860 ms
java.lang.AssertionError: Unexpected escape success for path=/..: 
type=2;size=0;uid=0;gid=0;perms=0x41ed;flags=[Perms, OwnerGroup, AccessTime, 
ModifyTime, 
CreateTime];owner=aho1;aTime=2016-04-12T20:10:38Z;cTime=2016-04-12T20:10:38Z;mTime=2016-04-12T17:57:35Z;extensions=[]

        at org.junit.Assert.fail(Assert.java:88)
        at 
org.apache.sshd.client.subsystem.sftp.SftpTest.testCannotEscapeUserRoot(SftpTest.java:295)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at 
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
        at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
        at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
        at 
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
        at 
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
        at 
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)

Disconnected from the target VM, address: '127.0.0.1:49673', transport: 'socket'

Process finished with exit code 255


> VirtualFileSystemFactory allows escaping from root
> --------------------------------------------------
>
>                 Key: SSHD-605
>                 URL: https://issues.apache.org/jira/browse/SSHD-605
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 1.0.0
>         Environment: Windows, JDK 7
>            Reporter: Damien B
>            Assignee: Goldstein Lyor
>              Labels: security
>             Fix For: 1.1.0
>
>
> Possibly Windows only.
> I start a SFTP server like this:
> sshd = SshServer.setUpDefaultServer();
> [...]
> sshd.setFileSystemFactory(new 
> VirtualFileSystemFactory(myRootDir.getCanonicalPath()));
> [...]
> sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new 
> SftpSubsystemFactory()));
> I connect to the server with FileZilla.
> Upon connexion, the files in myRooDir correctly appear under the server path 
> '/'. But if I cd to '/c:/Windows/', the files in C:\Windows\ appear, escaping 
> the VFS root.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to