🇰🇷 한글 설명
Linux 커널의 jbd2 구성 요소에서 체크포인트 제거 전 트랜잭션 상태를 확인하지 않아 발생하는 취약점입니다. 특정 조건에서 ext4 파일 시스템 이미지가 손상될 수 있으며, 전원 차단 시 데이터 유실 위험이 있습니다.
💡 쉬운 설명
파일을 저장하는 과정에서 데이터의 기록 상태를 제대로 확인하지 못해 발생하는 오류입니다. 갑작스럽게 컴퓨터 전원이 꺼지면 저장된 파일이 깨지거나 사라질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
jbd2: check 'jh->b_transaction' before removing it from checkpoint
Following process will corrupt ext4 image:
Step 1:
jbd2_journal_commit_transaction
__jbd2_journal_insert_checkpoint(jh, commit_transaction)
// Put jh into trans1->t_checkpoint_list
journal->j_checkpoint_transactions = commit_transaction
// Put trans1 into journal->j_checkpoint_transactions
Step 2:
do_get_write_access
test_clear_buffer_dirty(bh) // clear buffer dirty,set jbd dirty
__jbd2_journal_file_buffer(jh, transaction) // jh belongs to trans2
Step 3:
drop_cache
journal_shrink_one_cp_list
jbd2_journal_try_remove_checkpoint
if (!trylock_buffer(bh)) // lock bh, true
if (buffer_dirty(bh)) // buffer is not dirty
__jbd2_journal_remove_checkpoint(jh)
// remove jh from trans1->t_checkpoint_list
Step 4:
jbd2_log_do_checkpoint
trans1 = journal->j_checkpoint_transactions
// jh is not in trans1->t_checkpoint_list
jbd2_cleanup_journal_tail(journal) // trans1 is done
Step 5: Power cut, trans2 is not committed, jh is lost in next mounting.
Fix it by checking 'jh->b_transaction' before remove it from checkpoint.
📍 영향받는 시스템
Linux Kernel (jbd2/ext4 관련 버전)
⚔️ 공격 벡터
로컬 시스템에서 특정 파일 시스템 작업 및 전원 차단(Power cut) 시나리오를 통한 데이터 손상 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.