Zabbix 로그인 보안

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 코드를 찾을 때 어떤 정보로 찾을 지 알 수 있다.

Zabbix 로그인 계정 자동 완성 기능 On

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. 결과 확인

더이상 로그인 입력 창에서 자동완성 기능이 동작하지 않는다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다