[LTS 8.6 RT] CVE-2023-4623, VULN-6708 #136
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
[LTS 8.6 RT]
CVE-2023-4623
VULN-6708
Problem
https://www.cve.org/CVERecord?id=CVE-2023-4623
Analysis and solution
A single commit was identified as a fix for this issue: b3d26c5702c7d6c45456326e56d2ccf3f103e60f net/sched: sch_hfsc: Ensure inner classes have fsc curve.
The solution consisted of rejecting the addition of a class with a link-sharing curve to the class without it (see Specific tests for details)
The fix introduced a problem with existing network setup scripts for some users https://lore.kernel.org/all/[email protected]/:
It was decided to fix the problem without breaking backwards compatibility https://lore.kernel.org/all/[email protected]/:
The solution was to change the erroneous qdisc hierarchy to a correct one when the possible UAF condition was detected https://lore.kernel.org/all/[email protected]/:
The fix of the fix is given in the commit a13b67c9a015c4e21601ef9aa4ec9c5d972df1b4 net/sched: sch_hfsc: upgrade 'rt' to 'sc' when it becomes a inner curve
While the changes could be squashed into a single commit it was decided to retain the sequence of two commits for more straightforward LTS 8.6 RT - mainline patches correspondence.
The same solution was used already in other "version 8" branches
centos8
,fips-8-complaint/4.18.0-553.16.1
,fips-8/4.18.0-553.16.1
,rocky8_10
,sig-cloud-8/4.18.0-553.22.1.el8_10
,sig-cloud-8/4.18.0-553.33.1.el8_10
,sig-cloud-8/4.18.0-553.36.1.el8_10
:as well as in
ciqcbr7.9
:kABI check: omitted (unstable ABI of RT kernels)
Boot test: passed
Refer to Specific tests for implicit boot test passing.
Kselftests: passed relative
Methodology
Source-compiled (
e1a9851e6068a6ef800ec6b2b48a7c243882ed06
) kselftests suite was used.Coverage (including tests skipped during execution)
android
,breakpoints
,capabilities
,core
,cpu-hotplug
,cpufreq
,efivarfs
,exec
,filesystems
,firmware
,fpu
,ftrace
,futex
,gpio
,intel_pstate
,ipc
,kcmp
,kvm
,lib
,livepatch
,membarrier
,memfd
,memory-hotplug
,mount
,net
,net/forwarding
,net/mptcp
,netfilter
,nsfs
,proc
,pstore
,ptrace
,rseq
,rtc
,sgx
,sigaltstack
,size
,splice
,static_keys
,sync
,sysctl
,tc-testing
,timens
,timers
,tpm2
,user
,vm
,x86
,zram
Reference
ciqlts8_6-rt
(4d7a77d12ab8e3796e87dbf668480b65ea40a83b
)Five test runs were conducted on the reference kernel.
kselftests–src–ciqlts8_6-rt–run1.log
kselftests–src–ciqlts8_6-rt–run2.log
kselftests–src–ciqlts8_6-rt–run3.log
kselftests–src–ciqlts8_6-rt–run4.log
kselftests–src–ciqlts8_6-rt–run5.log
Patch
ciqlts8_6-rt-CVE-2023-4623
(08c51c3ed947c0a2ae712c782b5cba1f4611528f
)Two test runs were conducted on the patched kernel.
kselftests–src–ciqlts8_6-rt-CVE-2023-4623–run2.log
kselftests–src–ciqlts8_6-rt-CVE-2023-4623–run1.log
Comparison
Tests
kvm:hardware_disable_test
,net/mptcp:mptcp_join.sh
,net:gro.sh
,net:ip_defrag.sh
,net:reuseport_addr_any.sh
have already shown inconsistent behavior before https://docs.google.com/spreadsheets/d/1tUwJ2rV57cYZXh7momPtraSjZcHDjMYHLeHA3DYWrUU/edit?pli=1&gid=0#gid=0&range=D:DThe
net:bareudp.sh
test was skipped in the first two runs of the reference set because of thetc
command missing in the systemThe dependency was later solved with the
iproute-tc
package. Same for thetc-testing:tdc.sh
testSpecific tests: passed
The potential UAF condition was found to be reproducible with the following
tc
commands sequence:The "100kbps", "50kbps" parts are arbitrary. What's important is the use of
rt
for the inner class andls
for the leaf class. While the exact UAF was not obtained the commands helped confirm the efficacy of the patch.Reference
The incorrect qdisc hierarchy can be created without any guardrails.
Full logs:
fix-replicate–ciqlts8_6-rt.log
Patch
Creating the incorrect qdisc hierarchy raises a warning, but succeeds. Notice the type of inner class being
sc
instead ofrt
as shown bytc -g class show dev lo
command.Full logs:
fix-replicate–ciqlts8_6-rt-CVE-2023-4623.log