Skip to content

Create object fails when CLP user pointer create set to true public create set to false #6359

Closed
@TravisHeaver

Description

@TravisHeaver

Issue Description

Create new object fails when CLP public read/write set to false but pointer to _User (column named user) read/write set to true.

I am able to create objects when public create is set to true, however this leads to a vulnerability that a user can create an object for any user, there is no validation who is creating

Steps to reproduce

schema for the class
{
"_id": {
"$oid": "5e2895a31c9d440000ff973d"
},
"objectId": "string",
"updatedAt": "date",
"createdAt": "date",
"_metadata": {
"fields_options": {
"client": {
"required": false
},
"sku": {
"required": false
},
"note": {
"required": false
},
"currency": {
"required": false
},
"value": {
"required": false
},
"user": {
"required": true
},
"photo": {
"required": false
}
},
"indexes": {
"id": {
"_id": {
"$numberInt": "1"
}
}
},
"class_permissions": {
"get": {},
"find": {},
"count": {},
"create": {},
"update": {},
"delete": {},
"addField": {},
"readUserFields": ["user"],
"writeUserFields": ["user"]
}
},
"client": "Client",
"sku": "string",
"note": "string",
"currency": "string",
"value": "number",
"user": "
_User",
"photo": "file"
}

Screen Shot 2020-01-22 at 1 38 07 PM

Expected Results

When passing a valid session and the pointer to user matches that session users I expect the creation of a new object

Actual Outcome

{code: 119, error: "Permission denied for action create on class Sale."}

Environment Setup

  • Server

    • parse-server version 3.10.0
    • Operating System: MacOS 10.15.2
    • Hardware: MacBook Pro
    • Localhost or remote server? localhost
  • Database

    • MongoDB version: 4.2.2
    • Storage engine: WiredTiger
    • Hardware: M0
    • Localhost or remote server? MongoDB Atlas

Logs/Trace

error: Parse error: Permission denied for action create on class Sale. {"code":119,"stack":"Error: Permission denied for action create on class Sale.
at Function.validatePermission parse-server/lib/Controllers/SchemaController.js:1291:13)\n at SchemaController.validatePermission
parse-server/lib/Controllers/SchemaController.js:1304:29)
at validateClassName.then.then.schemaController

Which brings us here:
// No matching CLP, let's check the Pointer permissions
// And handle those later
const permissionField =
['get', 'find', 'count'].indexOf(operation) > -1
? 'readUserFields'
: 'writeUserFields';

// Reject create when write lockdown
if (permissionField == 'writeUserFields' && operation == 'create') {
  throw new Parse.Error(
    Parse.Error.OPERATION_FORBIDDEN,
    `Permission denied for action ${operation} on class ${className}.`
  );
}

as the note suggests 'handle those later' doesn't seem to get handled

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions