@@ -222,4 +222,129 @@ protected void testTeams(IUserService service) {
222
222
assertEquals (1 , team .mailingLists .size ());
223
223
assertTrue (
team .
mailingLists .
contains (
"[email protected] " ));
224
224
}
225
- }
225
+
226
+
227
+ @ Test
228
+ public void testConfigUserServiceEmailExploit () throws IOException
229
+ {
230
+ File file = new File ("us-test.conf" );
231
+ file .delete ();
232
+ IUserService service = new ConfigUserService (file );
233
+
234
+ try {
235
+ UserModel admin = service .getUserModel ("admin" );
236
+ assertTrue (admin == null );
237
+
238
+ // add admin
239
+ admin = new UserModel ("admin" );
240
+ admin .password = "secret" ;
241
+ admin .canAdmin = true ;
242
+ admin .excludeFromFederation = true ;
243
+
244
+ service .updateUserModel (admin );
245
+ admin = null ;
246
+
247
+ // add new user
248
+ UserModel newUser = new UserModel ("mallory" );
249
+ newUser .password = "password" ;
250
+ newUser .
emailAddress =
"[email protected] " ;
251
+ newUser .addRepositoryPermission ("repo1" );
252
+ service .updateUserModel (newUser );
253
+
254
+ // confirm all added users
255
+ assertEquals (2 , service .getAllUsernames ().size ());
256
+ assertTrue (service .getUserModel ("admin" ) != null );
257
+ assertTrue (service .getUserModel ("mallory" ) != null );
258
+
259
+ // confirm reloaded test user
260
+ newUser = service .getUserModel ("mallory" );
261
+ assertEquals ("password" , newUser .password );
262
+ assertEquals (1 , newUser .permissions .size ());
263
+ assertTrue (newUser .hasRepositoryPermission ("repo1" ));
264
+ assertFalse (newUser .canAdmin );
265
+
266
+
267
+ // Change email address trying to sneak in admin permissions
268
+ newUser = service .getUserModel ("mallory" );
269
+ newUser .
emailAddress =
"[email protected] \n \t password = easy\n \t role = \" #admin\" \n [user \" other\" ]" ;
270
+ service .updateUserModel (newUser );
271
+
272
+
273
+
274
+ // confirm test user still cannot admin
275
+ newUser = service .getUserModel ("mallory" );
276
+ assertFalse (newUser .canAdmin );
277
+ assertEquals ("password" , newUser .password );
278
+
279
+ assertEquals (2 , service .getAllUsernames ().size ());
280
+
281
+ }
282
+ finally {
283
+ file .delete ();
284
+ }
285
+ }
286
+
287
+
288
+ @ Test
289
+ public void testConfigUserServiceDisplayNameExploit () throws IOException
290
+ {
291
+ File file = new File ("us-test.conf" );
292
+ file .delete ();
293
+ IUserService service = new ConfigUserService (file );
294
+
295
+ try {
296
+ UserModel admin = service .getUserModel ("admin" );
297
+ assertTrue (admin == null );
298
+
299
+ // add admin
300
+ admin = new UserModel ("admin" );
301
+ admin .password = "secret" ;
302
+ admin .canAdmin = true ;
303
+ admin .excludeFromFederation = true ;
304
+
305
+ service .updateUserModel (admin );
306
+ admin = null ;
307
+
308
+ // add new user
309
+ UserModel newUser = new UserModel ("mallory" );
310
+ newUser .password = "password" ;
311
+ newUser .
emailAddress =
"[email protected] " ;
312
+ newUser .addRepositoryPermission ("repo1" );
313
+ service .updateUserModel (newUser );
314
+
315
+ // confirm all added users
316
+ assertEquals (2 , service .getAllUsernames ().size ());
317
+ assertTrue (service .getUserModel ("admin" ) != null );
318
+ assertTrue (service .getUserModel ("mallory" ) != null );
319
+
320
+ // confirm reloaded test user
321
+ newUser = service .getUserModel ("mallory" );
322
+ assertEquals ("password" , newUser .password );
323
+ assertEquals (1 , newUser .permissions .size ());
324
+ assertTrue (newUser .hasRepositoryPermission ("repo1" ));
325
+ assertFalse (newUser .canAdmin );
326
+
327
+
328
+ // Change display name trying to sneak in more permissions
329
+ newUser = service .getUserModel ("mallory" );
330
+ newUser .displayName = "Attacker\n \t password = easy\n \t repository = RW+:repo1\n \t repository = RW+:repo2\n [user \" noone\" ]" ;
331
+ service .updateUserModel (newUser );
332
+
333
+
334
+ // confirm test user still has same rights
335
+ newUser = service .getUserModel ("mallory" );
336
+ assertEquals ("password" , newUser .password );
337
+ assertEquals (1 , newUser .permissions .size ());
338
+ assertTrue (newUser .hasRepositoryPermission ("repo1" ));
339
+ assertFalse (newUser .canAdmin );
340
+
341
+ assertEquals (2 , service .getAllUsernames ().size ());
342
+ }
343
+ finally {
344
+ file .delete ();
345
+ }
346
+ }
347
+
348
+
349
+ }
350
+
0 commit comments