xtunnel — российский туннель, который позиционирует себя аналогом ушедшего из России ngrok. Сегодня, работая над учебным проектом, я заметил за ним любопытное поведение. Например, мы ставим на логине токен как http only куку (ниже и дальше будет представлен код на Java Spring, но подобное поведение аналогично во всех языках):
private void setTokenCookie(String token, HttpServletRequest request, HttpServletResponse response) { if (token == null) { return; } ResponseCookie cookie = ResponseCookie.from(JwtAuthFilter.TOKEN_COOKIE, token) .httpOnly(true) .secure(request.isSecure()) .sameSite("Lax") .path("/api") .maxAge(Duration.ofMillis(expirationMs)) .build(); response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); }
Нормальные туннели не трогают такие куки, однако xtunnel такую куку закеширует (!) и будет подставлять ее в релеватные запросы по требованию кого угодно (!!). Например, в следующий метод, кто бы его не вызвал, xtunnel подставит куки последнего залогинного пользователя:
@GetMapping public ResponseEntity<?> get( @CookieValue(name = JwtAuthFilter.TOKEN_COOKIE, required = false) String token) { if (token == null) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } // do something }
Таким образом, пользователи в обход логина могут представляться другими пользователями.
ссылка на оригинал статьи https://habr.com/ru/articles/1052046/