91³Ô¹ÏÍø

Watch CBS News

Russia launches deadliest aerial assault of the year on Ukraine, killing 16, officials say

Kyiv, Ukraine — Russia launched its deadliest aerial assault so far this year on Ukraine, killing 16 people, including a 12-year-old child, according to Ukrainian officials. Ukraine's Defense Ministry said Thursday's overnight attack included nearly 700 drones and 19 ballistic missiles targeting cities across the country. 

Ukraine's capital bore some of the heaviest damage. Kyiv Mayor Vitali Klitschko said the strikes killed four people, including the 12-year-old, adding that a drone slammed into an 18-story building. 

Regional officials said nine people were killed in Odesa and two in the southeastern city of Dnipro, where drones also struck residential buildings. Ukraine's southeastern cities of Mykolaiv and Kherson were without power Thursday morning, as the Russian attack targeted energy infrastructure in the region. 

Aftermath Of Overnight Russian Missile Strike On Kyiv
A crater caused by a Russian strike is visible in the ground on April 16, 2026 in Kyiv, Ukraine. Russia launched a massive missile and drone attack overnight. Andriy Zhyhaylo / Oboz.ua / Global Images Ukraine via Getty Images

Ukraine's President Volodymyr Zelenskyy said Russia should not receive sanctions relief in the wake of the attack and implored allies to impose more pressure on Moscow. 

"Russia is betting on war, and the response must be exactly that: we must defend lives with all available means, and we must also apply pressure for the sake of peace with the same full force," Zelenskyy said in a social media post. "I am grateful to those in the world who work with us in this way and who help Ukraine in a timely and comprehensive manner, fully aware that every act of support truly matters for saving lives."

A U.S. Treasury Department  sanctions waiver on certain Russian oil sales expired Saturday. The waiver was part of an effort by the Trump administration to stabilize markets during America's war with Iran. U.S. Treasury Secretary Scott Bessent said Wednesday that the administration "will not be renewing the general license on Russian oil," appearing to confirm that the sanctions relief would not be extended. 

Ukraine has increased its long-range attacks on Russia's oil and gas infrastructure recently as it attempts to offset the profits Russia has earned from higher Brent crude prices and sanctions relief during the Iran war. 

Russia's defense ministry said 207 Ukrainian drones were intercepted overnight, while Ukraine's Air Force said 31 missiles and 636 drones were downed during Russia's attack. 

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });