Как xtunnel может создать дыру в приложении

от автора

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/