본문 바로가기
Dev.Mobile/Tizen

TIZEN : Zero-day 공격에 취약하고 최악인 소스 코드

by Devkin 2017. 4. 10.

한 이스라엘 보안 전문가에 의해 타이젠 소스 코드가 제로데이 공격에 취약하고 학부생에 의해 작성된듯한 최악의 코드라고 평가해서 각종 매체에서 떠들썩하다. 얼마나 문제가 있길래 최악의 소스코드라고 얘기하는지 궁금한데 전체 코드를 리뷰하기엔 무리여서 타이젠 git repo 중 프로젝트 하나를 살펴보았다.

profile/tv/apps/native/filebrowser.git

위키리크스에 삼성 스마트 TV 해킹이슈도 있었고 해서 TV 관련한 repo를 선택. 코드만 봐서는 코딩 가이드라인이나 보안 검수가 없는 것 처럼 보인다.

FbContextView.cpp

Buffer Overflow에 취약한 strcpy사용.

bool CContextView::_get_context_details(CExtNameInfo *pInfo, char **path, char **title, char *subtitle, char *subtitle2)
{
    char buf[MAX_LENGTH];
    TSize size;
    double size_mb;
    int type;

    if (!pInfo)
        return false;

    *title = pInfo->Name();
    *path  = pInfo->ThumbnailPath();
    size = pInfo->Size();

    size_mb = (double)size / (1024 * 1024); /* Convert to MB */

    snprintf(buf, sizeof(buf), "%s : %f MB", _(FBR_TEXT_SIZE), size_mb);
    strcpy(subtitle, buf);

    type = pInfo->Type();
    snprintf(buf, sizeof(buf), "%s : %s", _(FBR_TEXT_FORMAT), _(typestr[type]));
    strcpy(subtitle2, buf);

    return true;
}

Popup.cpp

bool 리턴 타입에 NULL 리턴.

bool CPopup::Create(Evas_Object* base)
{
    ASSERT(base);

    if (m)
        return false;

    m = new SPopup;
    if (!m)
        return false;

    Evas_Object *popup, *label, *icon;
    double scale;
    char buf[MAX_LENGTH];

    popup = elm_popup_add(base);
    if (!popup)
        return NULL;

FbBaseView.cpp

pCurrentLayoutId는 코드상에서 사용되지 않는걸로 보이고 Double Pointer에 char타입이라 변수 네이밍에도 문제가 있어 보인다.

struct SFbBaseView {
    Evas_Object *eoWin;
    Evas_Object *eoBase;
    Evas_Object *eoBtnGroup[TOTAL_GROUP_BTNS];
    Evas_Object *eoSelectedBtnGroup;//Evas_Object *c_grpbtn;
    Evas_Object *eoBtnSource;
    Evas_Object *eoBtnSort;

    CCtxPopup   *pCtxPopup;
    CPopup      *pPopup;

    CLayoutMgr     *pLayoutMgr;

    char*          *pCurrentLayoutId;

만일 다른 프로젝트도 이와 비슷한 수준이라면 리팩토링은 절실해 보인다.

References

반응형

댓글