Uploaded image for project: 'Jackrabbit Oak'
  1. Jackrabbit Oak
  2. OAK-1115

Remove of Subtree after Move is not subjected to permission validation

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • None
    • 0.15
    • core
    • None

    Description

      the following test passes in Jackrabbit-Core but fails in OAK:

      @Test
          public void testMoveRemoveSubTree() throws Exception {
              superuser.getNode(childNPath).addNode(nodeName3);
              superuser.save();
      
              /* allow READ/WRITE privilege for testUser at 'path' */
              givePrivileges(path, privilegesFromNames(new String[] {Privilege.JCR_READ, "rep:write"}), Collections.<String, Value>emptyMap());
              /* deny READ/REMOVE property privileges at subtree. */
              withdrawPrivileges(path, privilegesFromNames(new String[] {Privilege.JCR_REMOVE_NODE}), Collections.singletonMap("rep:glob", superuser.getValueFactory().createValue("*/"+nodeName3)));
      
              Session testSession = getTestSession();
              assertTrue(testSession.nodeExists(childNPath));
              assertTrue(testSession.hasPermission(childNPath, Session.ACTION_REMOVE));
              assertTrue(testSession.hasPermission(childNPath2, Session.ACTION_ADD_NODE));
      
              testSession.move(childNPath, childNPath2 + "/dest");
              Node dest = testSession.getNode(childNPath2 + "/dest");
              dest.getNode(nodeName3).remove();
      
              try {
                  testSession.save();
                  fail("Removing child node must be denied.");
              } catch (AccessDeniedException e) {
                  // success
              }
          }
      

      this is a critical security issue as it moving around the parent is sufficient in order to be able to remove a node that was otherwise not removable due to limited permissions.

      Afaik this behavior is caused by a limitation in the Diff process which doesn't allow to identify the move and thus makes it impossible to find out if that the subtree has been removed.

      Attachments

        Issue Links

          Activity

            People

              angela Angela Schreiber
              angela Angela Schreiber
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: