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
}Таким образом, пользователи в обход логина могут представляться другими пользователями.



























