게시판에서 글을 작성할 때 img src 태그를 이용해서 사진을 삽입하고 있습니다.
현재 사진을 첨부할 때 "KBoard 미디어 추가" 버튼을 이용해서 사진을 업로드 하게 되면
<img src="/uploads/1/x.jpg">와 같이 사진을 업로드할 수 있는데,
이 img src 부분에 어떠한 주소든 모두 입력할 수 있습니다.
예를 들어 <img src="http://test.test.test"> 와 같은 식으로 작성하면 (공격자의) 특정 url을 항상 불러오게 됩니다.(csrf와 연결 가능)
하지만 iframe의 경우에는 whitelist를 통해서 이를 막아주고 있습니다.
또 "KBoard 미디어 추가" 기능이 있다는 것은 항상 현재 웹사이트의 하위 주소의 이미지만 불러오기를 허용하는 것으로 이해를 했는데,
혹시 이에 대해서 어떻게 생각하시는지 궁금합니다.
안녕하세요~^^
KBoard(케이보드) 게시글의 제목과 내용 부분은 HTML Purifier 를 사용해서 필터링을 하고 있습니다.
말씀하신 "KBoard 미디어 추가" 기능은 게시글에 종속되는 이미지 파일을 업로드할 수 있는 기능입니다.
관리자만 사용할 수 있는 "미디어 추가" 기능은 워드프레스 미디어에 종속되어 관리자만 사용할 수 있으며 같은 이미지 파일을 여러 게시글에 삽입해서 표시할 수 있습니다.
"KBoard 미디어 추가" 또는 워드프레스의 "미디어 추가" 기능은 모두 파일을 업로드 하는 기능입니다.
이미지 파일 업로드가 완료됐다면 이 것들의 역할은 끝나게 됩니다.
더 이상 게시글 내용과는 영향이 없습니다.
파일을 업로드 한 다음 실제로 게시글 내용에는 <img> 태그 형태로 삽입됩니다.
그래서 작성자가 임의로 내용을 바꾸거나 태그의 속성을 바꿀 수 있습니다.
혹은 "KBoard 미디어 추가" 또는 워드프레스의 "미디어 추가"로 업로드된 이미지 경로가 아니어도 태그를 입력하고 게시글 작성이 가능합니다.
외부 서버 혹은 다른 서비스에 올려진 이미지도 게시글 내용에 삽입할 수 있어야 하기 때문에 <iframe> 태그와 같은 whitelist 필터는 존재하지 않습니다.
따라서 버그라고 생각은 안되었는데요.
만약의 경우를 위해서 <iframe> 태그와 비슷하게 whitelist 설정이 추가되면 좋을 듯합니다.
이 부분은 저희가 좀 더 연구해서 업데이트를 해보겠습니다.
고맙습니다.
버그가 생길 수 있습니다.
관리자 권한으로 로그인 한 이후에 게시판의 특정 글에 들어가면 삭제 권한이 생깁니다.
이상태에서 삭제 버튼을 누르기만 하면 삭제가 됩니다.
제 게시판에서는 글 삭제 링크가 <a href="/%ea%b2%8c%ec%8b%9c%ed%8c%90/qa/?mod=remove&pageid=1&uid=139&kboard-content-remove-nonce=15722c21a0"> 로 뜹니다.
만약 이 주소를 특정 글에서 정확히 img src로 불러오게 되면 관리자가 그 글을 읽었을 때 글이 삭제될 것입니다.
다음과 같이 <img src="/%ea%b2%8c%ec%8b%9c%ed%8c%90/qa/?mod=remove&pageid=1&uid=139&kboard-content-remove-nonce=15722c21a0">를 넣은 후 관리자 계정으로 게시판에 접속하니 글이 삭제되는 것을 확인할 수 있습니다.
이 문제는 GET parameter로 제공하는 kboard-content-remove-nonce 변수값과도 연관되는데요,
원래 remove-nonce값은 페이지를 로드할 때마다 바뀌어야하는데 게시판에서 바뀌지 않는 것을 알 수 있습니다.
일단 이부분에 관해서 업데이트가 필요할 것으로 추측됩니다.
또 알려지지 않은 관련된 버그가 많이 생길 수 있으므로 img src로 검증되지 않은 외부 서버의 값을 바로 가져오기보다는 내부에서 먼저 검증을 거친 이후에 img src 태그를 이용할 수 있도록 해야할 것입니다.
버그가 생길 수 있습니다.
관리자 권한으로 로그인 한 이후에 게시판의 특정 글에 들어가면 삭제 권한이 생깁니다.
이상태에서 삭제 버튼을 누르기만 하면 삭제가 됩니다.
제 게시판에서는 글 삭제 링크가 <a href="/%ea%b2%8c%ec%8b%9c%ed%8c%90/qa/?mod=remove&pageid=1&uid=139&kboard-content-remove-nonce=15722c21a0"> 로 뜹니다.
만약 이 주소를 특정 글에서 정확히 img src로 불러오게 되면 관리자가 그 글을 읽었을 때 글이 삭제될 것입니다.
다음과 같이 <img src="/%ea%b2%8c%ec%8b%9c%ed%8c%90/qa/?mod=remove&pageid=1&uid=139&kboard-content-remove-nonce=15722c21a0">를 넣은 후 관리자 계정으로 게시판에 접속하니 글이 삭제되는 것을 확인할 수 있습니다.
이 문제는 GET parameter로 제공하는 kboard-content-remove-nonce 변수값과도 연관되는데요,
원래 remove-nonce값은 페이지를 로드할 때마다 바뀌어야하는데 게시판에서 바뀌지 않는 것을 알 수 있습니다.
일단 이부분에 관해서 업데이트가 필요할 것으로 추측됩니다.
또 관련된 버그가 많이 생길 수 있으므로 img src로 검증되지 않은 외부 서버의 값을 바로 가져오기보다는 내부에서 먼저 검증을 거친 이후에 img src 태그를 이용할 수 있도록 해야할 것입니다.
안녕하세요.
kboard-content-remove-nonce 값은
워드프레스의 wp_create_nonce() 함수를 사용합니다.
삭제 권한이 있는 사용자와 삭제 권한이 없는 사용자의
remove-nonce 값은 다르게 표시됩니다.
실제 테스트해보신 코드 중에서 15722c21a0 부분은
삭제 권한이 없는 사용자로 확인했을 땐 다르게 표시됩니다.
따라서 실제 삭제 시 필요한 kboard-content-remove-nonce 값을
관리자나 글 작성자 이외에는 확인할 수 없습니다.
고맙습니다.