Zabbix 6 로그인 Form 자동 완성 기능 Off 설정
목차
01. CVE 취약점 내용
취약점 이름
Autocomplete enabled for sensitive HTML form fields
취약점 내용
웹 양식에는 브라우저 자동 완성 기능이 활성화되는 암호 또는 기타 민감한 텍스트 필드가 포함되어 있습니다. 자동 완성점은 브라우저에서 로컬로 구성된 양식 필드 및 암호를 완성하여 사용자가 다시 사이트를 방문 할 때 이러한 필드가 자동으로 채워집니다.
사용자 시스템이 손상되면 민감한 데이터와 비밀번호를 도난 당할 수 있습니다.
그러나 Form Auto-Complete는 각 브라우저가 다르게 처리하는 비표준 브라우저 측 기능입니다. 예를 들어 Opera는 기능을 무시하고 사용자가 각 웹 사이트 방문에 대한 자격 증명을 입력해야합니다.
조치 방법
모든 민감한 필드에 대해 자동 완성을 비활성화하십시오. HTML의 각 민감한 필드에 대해 “자동 완성”속성을 “OFF”로 설정하십시오. 예를 들어:<입력 유형 = “비밀번호”autocomplete = “off”name = “pw”>필드가 많으면 외부 <form> 태그에서 “autocomplete”속성을 “OFF”로 설정하는 것이 더 빠를 수 있습니다. 예를 들어:<form action = “/login.jsp”autocomplete = “off”name = “pw”> <input type = “password”name = “pw”> </form>
내용 정리
위 내용을 정리하자면 웹 브라우저에서 로그인 입력 폼에서 이전에 입력 되었던 계정이 자동 완성 되는 기능이 있다. 이는 정보가 될 수 있으니 기능 비활성화를 해야 한다는 의미이다.
기능 비활성화 방법은 HTML 코드 상에서 수행되어야 하며, 로그인 폼의 속성에 autocomplete=”off” 코드를 넣어야 한다.
02. Zabbix 6에서 코드 수정 방법
02-1. DocumentRoot 찾기
코드가 저장되는 DocumentRoot를 찾아보자
nginx에서는 root 옵션을 확인하면 /usr/share/zabbix 경로에 zabbix 코드가 저장된 것을 확인할 수 있다.
[clex@test-zabbix nginx]$ sudo vi /etc/nginx/conf.d/zabbix.conf
server {
# listen 8080;
# server_name example.com;
root /usr/share/zabbix; <---------- 이거 확인
index index.php;
location = /favicon.ico {
log_not_found off;
}
02-2. HTML Attribute(속성) 값 확인
개발자 도구를 사용하여 로그인 Form의 속성 값을 확인 하자.
HTML 코드를 찾을 때 어떤 정보로 찾을 지 알 수 있다.
02-3. 원하는 코드가 어디에 위치해 있는지 찾자
자.. 이제부터 남들이 만들어 놓은 코드를 노가다로 하나 하나 뒤지면서 어디를 수정해야 할 지 찾아봐야 한다.
많은 곳을 찾고 뒤지고 수정 했지만, 이 문서는 가이드니 결과적으로 성공한 하나의 예시만 들것이다.
DocumentRoot 경로에서 개발자 도구에서 찾았던 키워드를 이용하여 grep 명령어로 검색했을 때 3가지 파일이 나왔다.
[root@test-zabbix zabbix]# grep -i -r 'autofocus' ./* | grep name
./include/classes/html/CRadioButtonList.php: if ($name === 'autofocus') {
./include/views/configuration.httpconf.edit.php: $name_text_box->setAttribute('autofocus', 'autofocus');
./include/views/general.login.php: (new CTextBox('name'))->setAttribute('autofocus', 'autofocus'), <------- 유력 후보
마지막 라인의 코드에 표시해 둔 ‘유력 후보’가 있다.
PHP 코드로 <input> 요소에 setAttribute를 이용하여 속성 값을 변경할 수 있으며, general.login.php라는 파일 이름이 유력 후보로 된 이유다.
02-4. 코드 수정하기
Zabbix 6 버전은 총 두 군데를 수정해야 한다.
- 최초 로그인 페이지와, 로그인 후 사용자를 생성하는 페이지이다.
아래 코드에서 ‘-, +’로 표시해 둔 부분을 수정하자.
- autofocus를 off로 변경
.......
->addItem(
(new CList())
->addItem([
new CLabel(_('Username'), 'name'),
- (new CTextBox('name'))->setAttribute('autofocus', 'autofocus'),
+ (new CTextBox('name'))->setAttribute('autocomplete', 'off'),
$error
])
->addItem([new CLabel(_('Password'), 'password'), new CPassBox('password')])
->addItem(
(new CCheckBox('autologin'))
->setLabel(_('Remember me for 30 days'))
->setChecked($data['autologin'])
)
->addItem(new CSubmit('enter', _('Sign in')))
->addItem($guest)
->addItem($http_login_link)
->addItem($saml_login_link)
)
.......
이번 코드에서도 수정을 하자.
추가된 내용
- ->setAttribute(‘autocomplete’, ‘off’)
......
(new CList())
->addItem([
new CLabel(_('Username'), 'name'),
(new CTextBox('name'))->setAttribute('autocomplete', 'off'),
$error
])
- ->addItem([new CLabel(_('Password'), 'password'), new CPassBox('password')])
+ ->addItem([new CLabel(_('Password'), 'password'),(new CPassBox('password'))->setAttribute('autocomplete', 'off')])
->addItem(
(new CCheckBox('autologin'))
->setLabel(_('Remember me for 30 days'))
->setChecked($data['autologin'])
)
->addItem(new CSubmit('enter', _('Sign in')))
->addItem($guest)
->addItem($http_login_link)
->addItem($saml_login_link)
......
02-5. 서비스 재시작
nginx 만 재시작 하면 될 것 같으나 혹시 모르니 php-fpm도 같이 재시작 하자.
[root@test-zabbix ~]# systemctl restart php-fpm
[root@test-zabbix ~]# systemctl restart nginx
02-6. 결과 확인
더이상 로그인 입력 창에서 자동완성 기능이 동작하지 않는다.