@@ -109,6 +109,56 @@ describe('Vulnerabilities', () => {
109109 ) ;
110110 } ) ;
111111
112+ it ( 'denies creating a cloud trigger with polluted data' , async ( ) => {
113+ Parse . Cloud . beforeSave ( 'TestObject' , ( { object } ) => {
114+ object . set ( 'obj' , {
115+ constructor : {
116+ prototype : {
117+ dummy : 0 ,
118+ } ,
119+ } ,
120+ } ) ;
121+ } ) ;
122+ await expectAsync ( new Parse . Object ( 'TestObject' ) . save ( ) ) . toBeRejectedWith (
123+ new Parse . Error (
124+ Parse . Error . INVALID_KEY_NAME ,
125+ 'Prohibited keyword in request data: {"key":"constructor"}.'
126+ )
127+ ) ;
128+ } ) ;
129+
130+ it ( 'denies creating a hook with polluted data' , async ( ) => {
131+ const express = require ( 'express' ) ;
132+ const bodyParser = require ( 'body-parser' ) ;
133+ const port = 34567 ;
134+ const hookServerURL = 'http://localhost:' + port ;
135+ const app = express ( ) ;
136+ app . use ( bodyParser . json ( { type : '*/*' } ) ) ;
137+ const server = await new Promise ( resolve => {
138+ const res = app . listen ( port , undefined , ( ) => resolve ( res ) ) ;
139+ } ) ;
140+ app . post ( '/BeforeSave' , function ( req , res ) {
141+ const object = Parse . Object . fromJSON ( req . body . object ) ;
142+ object . set ( 'hello' , 'world' ) ;
143+ object . set ( 'obj' , {
144+ constructor : {
145+ prototype : {
146+ dummy : 0 ,
147+ } ,
148+ } ,
149+ } ) ;
150+ res . json ( { success : object } ) ;
151+ } ) ;
152+ await Parse . Hooks . createTrigger ( 'TestObject' , 'beforeSave' , hookServerURL + '/BeforeSave' ) ;
153+ await expectAsync ( new Parse . Object ( 'TestObject' ) . save ( ) ) . toBeRejectedWith (
154+ new Parse . Error (
155+ Parse . Error . INVALID_KEY_NAME ,
156+ 'Prohibited keyword in request data: {"key":"constructor"}.'
157+ )
158+ ) ;
159+ await new Promise ( resolve => server . close ( resolve ) ) ;
160+ } ) ;
161+
112162 it ( 'allows BSON type code data in write request with custom denylist' , async ( ) => {
113163 await reconfigureServer ( {
114164 requestKeywordDenylist : [ ] ,
0 commit comments