@@ -5075,4 +5075,65 @@ describe('Vulnerabilities', () => {
50755075 expect ( response . status ) . toBe ( 403 ) ;
50765076 } ) ;
50775077 } ) ;
5078+
5079+ describe ( '(GHSA-g4v2-qx3q-4p64) /sessions/me bypasses _Session protectedFields' , ( ) => {
5080+ const headers = {
5081+ 'X-Parse-Application-Id' : 'test' ,
5082+ 'X-Parse-REST-API-Key' : 'rest' ,
5083+ 'Content-Type' : 'application/json' ,
5084+ } ;
5085+
5086+ it ( 'should not return protected fields on GET /sessions/me' , async ( ) => {
5087+ await reconfigureServer ( {
5088+ protectedFields : {
5089+ _Session : { '*' : [ 'createdWith' ] } ,
5090+ } ,
5091+ } ) ;
5092+ const user = new Parse . User ( ) ;
5093+ user . setUsername ( 'session-pf-user' ) ;
5094+ user . setPassword ( 'password123' ) ;
5095+ user . set ( 'email' , 'session-pf@example.com' ) ;
5096+ await user . signUp ( ) ;
5097+ const sessionToken = user . getSessionToken ( ) ;
5098+
5099+ // Normal GET /sessions should strip createdWith
5100+ const sessionsResponse = await request ( {
5101+ method : 'GET' ,
5102+ url : 'http://localhost:8378/1/sessions' ,
5103+ headers : { ...headers , 'X-Parse-Session-Token' : sessionToken } ,
5104+ } ) ;
5105+ expect ( sessionsResponse . data . results [ 0 ] . createdWith ) . toBeUndefined ( ) ;
5106+
5107+ // GET /sessions/me should also strip createdWith
5108+ const meResponse = await request ( {
5109+ method : 'GET' ,
5110+ url : 'http://localhost:8378/1/sessions/me' ,
5111+ headers : { ...headers , 'X-Parse-Session-Token' : sessionToken } ,
5112+ } ) ;
5113+ expect ( meResponse . data . createdWith ) . toBeUndefined ( ) ;
5114+ } ) ;
5115+
5116+ it ( 'should return non-protected fields on GET /sessions/me' , async ( ) => {
5117+ await reconfigureServer ( {
5118+ protectedFields : {
5119+ _Session : { '*' : [ 'createdWith' ] } ,
5120+ } ,
5121+ } ) ;
5122+ const user = new Parse . User ( ) ;
5123+ user . setUsername ( 'session-pf-user2' ) ;
5124+ user . setPassword ( 'password123' ) ;
5125+ user . set ( 'email' , 'session-pf2@example.com' ) ;
5126+ await user . signUp ( ) ;
5127+ const sessionToken = user . getSessionToken ( ) ;
5128+
5129+ const meResponse = await request ( {
5130+ method : 'GET' ,
5131+ url : 'http://localhost:8378/1/sessions/me' ,
5132+ headers : { ...headers , 'X-Parse-Session-Token' : sessionToken } ,
5133+ } ) ;
5134+ expect ( meResponse . data . sessionToken ) . toBe ( sessionToken ) ;
5135+ expect ( meResponse . data . objectId ) . toBeDefined ( ) ;
5136+ expect ( meResponse . data . user ) . toBeDefined ( ) ;
5137+ } ) ;
5138+ } ) ;
50785139} ) ;
0 commit comments