SonarQube — файл cookie не отправляется через SSL (CWE 614) (только Http)

Мы реализуем SonarQube в нашей среде, работающей за прокси-сервером IIS для подключения HTTPS.
После запуска проверки безопасности приложения (HP Fortify) обнаружились некоторые проблемы с безопасностью файлов cookie, в частности следующие:

Cookie Security: Cookie Not Sent Over SSL (4720)
CWE: 614

GET /sonarqube/ HTTP/1.1
Host: sonar
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
X-WIPP: AscVersion=16.20.608.0
X-Scan-Memo: Category="Crawl.EventMacro.Startup";
SID="F0A2B8712E7F609FAA4899C"; SessionType="StartMacro"; CrawlType="None";
X-RequestManager-Memo: sid="13442"; smi="0"; Category="EventMacro.Login";
MacroName="sonarqube-priv-loginmacro";
X-Request-Memo: ID="0e42a-fcf-4b6-a8f-0fbceb4c"; ThreadId="169";
Pragma: no-cache
Cookie: CustomCookie=WebInspect0
Response:
Report Date: 09/3/2017 38
HTTP/1.1 302 Found
Cache-Control: no-cache
Content-Type: text/html;charset=utf-8
Location: https://sonar/sonarqube/sessions/new
Server: Microsoft-IIS/10.0
Set-Cookie: JSESSIONID=XXX; Path=/sonarqube/; HttpOnly
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1...TRUNCATED...

Как вы думаете, это связано с конфигурацией IIS или это просто стандартная конфигурация в приложении SonarQube здесь?
Я не уверен, как интерпретировать результаты здесь или как в них копаться.
Любое предложение будет оценил.


person lapfrank    schedule 06.10.2017    source источник


Ответы (2)


С обратным прокси-сервером, таким как IIS, вы должны настроить обратный прокси-сервер для отправки следующего заголовка в SonarQube: X-Forwarded-Proto: https.

Вы можете посмотреть здесь: IIS Эквивалент proxy_set_header X-Forwarded-Proto https;

С этим установленным заголовком сеанс будет иметь отсутствующий флаг безопасности.

person Eric Hartmann    schedule 09.10.2017
comment
Спасибо, Эрик. У меня уже есть набор X-Forwarded-Proto: https в IIS. Остальной трафик https. По ссылке, на которую вы ссылаетесь, я тоже пытался добавить HTTP_X_FORWARDED_SCHEMA, но это не сработало. Я выполнил шаги, указанные в официальной установке SonarQube здесь. Кажется, я что-то упустил, чтобы файлы cookie были защищены. - person lapfrank; 10.10.2017
comment
Я смог воспроизвести то же самое с помощью NGINX. JSESSIONID не имеет флага secure. location / { proxy_pass http://localhost:9000/; proxy_read_timeout 90; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto "https"; } - person lapfrank; 10.10.2017
comment
@lapfrank, не могли бы вы сказать мне, какую версию SonarQube вы используете? - person Eric Hartmann; 11.10.2017
comment
Я использую версию 5.6.6 LTS. - person lapfrank; 11.10.2017
comment
О, я вижу, 5.6.6 все еще использует Ruby on Rails, и в этих файлах cookie отсутствует флаг безопасности. Лучший способ — настроить IIS для добавления этого отсутствующего флага. Я не эксперт по IIS, но что-то вроде stackoverflow.com/questions/25676490/ исправит это. - person Eric Hartmann; 12.10.2017
comment
Спасибо, Эрик. Похоже, это сработает, я попробую. Я думаю, что мое решение по редактированию web.xml во встроенном коте ближе к корню проблемы и лучшему месту для исправления, пока мы не обновимся до более новых версий? - person lapfrank; 13.10.2017
comment
Я не уверен, потому что думаю, что основная проблема заключается в коде Ruby. Самый простой способ для меня - сделать это в обратном прокси. - person Eric Hartmann; 13.10.2017

Благодаря этому ответу я смог установить флаг secure в файле cookie JSESSIONID.

Во встроенный экземпляр tomcat в WEB-INF\web.xml я добавил строку secure true:

  <session-config>
    <!-- in minutes -->
    <session-timeout>20</session-timeout>
    <cookie-config>
      <http-only>true</http-only>
      <secure>true</secure>
    </cookie-config>
  </session-config>

Это, вероятно, не самый безопасный способ сделать это, так как он, кажется, принудительно устанавливает флаг secure в любом случае, но поскольку я нахожусь за обратным прокси-сервером и запрещаю любые входящие соединения, кроме трафика https/443, это должно работать.

person lapfrank    schedule 10.10.2017