본문 바로가기

새빨간거짓말

CVE-2014-0515 Adobe Flash Player Shader(Pixel Bender) BOF 취약점



# 취약점 정보 







# 취약점 분석 




* Adobe Pixel Bender : 

이미지 내용을 만들거나 조작하는 데 사용되는 프로그래밍 언어로, Pixel Bender를 사용하면 셰이더라고도 하는 커널을 만들 수 있고 셰이더는 이미지의 각 픽셀에 대해 개별적으로 실행되는 단일 함수를 정의함. 


ShaderData 는 대충 이런 정보들을 담고 있다고 함. 


속성데이터 유형
nameString"DoNothing"
nameSpaceString"Adobe::Example"
versionString"1"
descriptionString"A shader that does nothing, but does it well."
srcShaderInput[A ShaderInput instance]
sizeShaderParameter[A ShaderParameter instance, with properties for the parameter metadata]
radiusShaderParameter

[A ShaderParameter instance, with properties for the parameter metadata]



Adobe 는 해당 데이터를 접근하기 위해서 다음 패키지를 제공하고 있다. 


import flash.display.Shader;


var shader:Shader = new Shader();

shader.byteCode = loader.data;



<출처: http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/display/ShaderData.html>









다음이 바로 데이터를 읽어서 처리하는 즉 취약점을 발생시키는 트리거 코드이다. 

 




해당 악성 SWF  파일의 공격 페이로드는 2단계로 나뉘어져 있다. 


  • 첫 번째 쉘코드는 두 번째 쉘코드를 위해 실행 가능한 공간을 할당하고 코드를 데이터를 복사한 후,

두번째 쉘코드의 첫 지점으로 점프하는 역할을 수행한다. 


      



  • 두 번째 쉘코드가 바로 공격자가 최종적으로 원하는 악의적인 행위를 수행하는 코드이다.  







참고로, 

최근 다양한 취약점(CVE-2014-0322, CVE-2014-1776, .) 에서는 Flash 상의  Array 오브젝트의 길이를  변형하고,  원하는 쉘코드를 실행하기 위해  Sound 오브젝트의 vftable 포인트를 조작하는 방법이 사용되고 있다.   

이번 취약점에서는  다음과 같이  기존의 Sound 오브젝트 대신 새로운 FileReference 오브젝트를 사용되었고,  FileReference.cancel() 함수가 호출될 때 힙 상에 올려진  공격자의 쉘코드가 실행된다. 





아직 많은 물음표(???) 들이 머릿속에 있지만  일단 요기까지~~~  ^^;;;;; 



※ 참고 : http://www.securelist.com/en/blog/8212/New_Flash_Player_0_day_CVE_2014_0515_used_in_watering_hole_attacks