The death toll rises to 115 in an attack on a Moscow concert hall

The death toll rises to 115 in an attack on a Moscow concert hall
By Associated Press
Published: March 23, 2024 04:02 PM

MOSCOW (AP) — Russian officials say the death toll has risen to 115 in an attack by assailants who burst into a concert hall and sprayed the crowd with gunfire.

The Islamic State group has claimed responsibility for Friday’s attack in a statement. The attack was the deadliest in Russia in years and left the concert hall in flames with a collapsing roof.

The head of Russia’s Federal Security Service told President Vladimir Putin on Saturday that four people directly involved in the attack were among 11 detained, Russian state news agency Tass said.

THIS IS A BREAKING NEWS UPDATE. AP’s earlier story follows below.

MOSCOW (AP) — Russian authorities detained 11 people, state media reported Saturday, after gunmen stormed a concert hall in Moscow in a grisly attack that left at least 93 people dead.

Russia’s Investigative Committee said four of those detained were directly involved in the attack. Russian agencies appeared to suggest the attack was linked to Ukraine even though the Islamic State group claimed responsibility in a statement. A U.S. intelligence official told The Associated Press that U.S. agencies had confirmed that that group was responsible for the attack.

The four suspects were stopped in the Bryansk region of western Russia, “not far from the border with Ukraine,” Russia’s Investigative Committee said. They planned to cross the border into Ukraine and “had contacts” there, state news agency Tass said, citing Russia’s FSB. The head of the FSB briefed President Vladimir Putin on the arrests on Saturday, according to Tass.

The attack came just days after Putin cemented his grip on power in a highly orchestrated electoral landslide. The attack was the deadliest in Russia in years and came as the country’s fight in Ukraine dragged into a third year.

Shortly after the attack, some Russian lawmakers pointed the finger at Ukraine. Mykhailo Podolyak, an adviser to Ukrainian President Volodymyr Zelenskyy, denied any involvement.

“Ukraine has never resorted to the use of terrorist methods,” he posted on X, formerly Twitter. “Everything in this war will be decided only on the battlefield.”

Images shared by Russian state media Saturday showed a fleet of emergency vehicles still gathered outside the ruins of Crocus City Hall, a shopping mall and music venue with a capacity of more than 6,000 people in Krasnogorsk, on Moscow’s western edge.

Videos posted online showed gunmen in the venue shooting civilians at point-blank range. The roof of the theater, where crowds had gathered Friday for a performance by the Russian rock band Picnic, collapsed in the early hours of Saturday morning as firefighters spent hours fighting a fire which erupted during the attack.

In a statement posted by its Aamaq news agency, the Islamic State’s affiliate in Afghanistan said it had attacked a large gathering of “Christians” in Krasnogorsk. It was not immediately possible to verify the authenticity of the claim.

A U.S. intelligence official told the AP that U.S. intelligence agencies had gathered information in recent weeks that the IS branch was planning an attack in Moscow, and that U.S. officials had privately shared the intelligence earlier this month with Russian officials.

The official was briefed on the matter but was not authorized to publicly discuss the intelligence information and spoke to the AP on condition of anonymity.

Messages of outrage, shock and support for those affected have since streamed in from around the world.

On Friday, the U.N. Security Council condemned “the heinous and cowardly terrorist attack” and underlined the need for the perpetrators to be held accountable. U.N. Secretary-General Antonio Guterres also condemned the terrorist attack “in the strongest possible terms,” his spokesman said.

Meanwhile, in Moscow itself, hundreds of people stood in line Saturday morning to donate blood and plasma, Russia’s health ministry said.

Putin, who extended his grip on Russia for another six years in this week’s presidential vote after a sweeping crackdown on dissent, had publicly denounced the Western warnings of a potential terrorist attack as an attempt to intimidate Russians. “All that resembles open blackmail and an attempt to frighten and destabilize our society,” he said earlier this week.

In October 2015, a bomb planted by the Islamic State downed a Russian passenger plane over Sinai, killing all 224 people on board, most of them Russian vacation-goers returning from Egypt. The group, which operates mainly in Syria and Iraq but also in Afghanistan and Africa, also has claimed several attacks in Russia’s volatile Caucasus and other regions in the past years. It recruited fighters from Russia and other parts of the former Soviet Union.

Request history8.2.19PHP Version7.78sRequest Duration6MBMemory UsageGET amp/news/{slug}Route
    • Booting (26.6ms)time
    • Application (7.76s)time
    • 1 x Application (99.66%)
      7.76s
      1 x Booting (0.34%)
      26.60ms
      1 templates were rendered
      • frontend.amp-detailamp-detail.blade.php#?blade
      uri
      GET amp/news/{slug}
      middleware
      web, mynews, kyc
      controller
      App\Http\Controllers\Frontend\News\NewsController@getBySlug
      namespace
      prefix
      where
      as
      news.slug
      file
      app/Http/Controllers/Frontend/News/NewsController.php:276-373
      10 statements were executed7.68s
      • NewsController.php#297republica12.59sselect `id`, `title`, `content`, `excerpt`, `permalink`, `pub_date`, `is_subscriber_only`, `is_subscriber_user`, `is_free`, `is_logged_in_user`, `content`, `caption`, `news_slug`, `exclusive_news` from `news` where `permalink` = 'the-death-toll-rises-to-115-in-an-attack-on-a-moscow-concert-hall' and `status` = 1 limit 1
        Bindings
        • 0: the-death-toll-rises-to-115-in-an-attack-on-a-moscow-concert-hall
        • 1: 1
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:297
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:291
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
      • NewsController.php#297republica16.32msselect `attachments`.`id`, `directory`, `file`, `news_has_attachments`.`news_id` as `pivot_news_id`, `news_has_attachments`.`attachment_id` as `pivot_attachment_id`, `news_has_attachments`.`created_at` as `pivot_created_at`, `news_has_attachments`.`updated_at` as `pivot_updated_at` from `attachments` inner join `news_has_attachments` on `attachments`.`id` = `news_has_attachments`.`attachment_id` where `news_has_attachments`.`is_featured_image` = '0' and `news_has_attachments`.`news_id` in (153243)
        Bindings
        • 0: 0
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:297
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:291
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
      • NewsController.php#297republica16.01msselect `categories`.`id`, `name`, `news_has_categories`.`news_id` as `pivot_news_id`, `news_has_categories`.`category_id` as `pivot_category_id`, `news_has_categories`.`created_at` as `pivot_created_at`, `news_has_categories`.`updated_at` as `pivot_updated_at` from `categories` inner join `news_has_categories` on `categories`.`id` = `news_has_categories`.`category_id` where `news_has_categories`.`news_id` in (153243)
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:297
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:291
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
      • NewsController.php#297republica17.48msselect `attachments`.`id`, `directory`, `file`, `news_has_attachments`.`news_id` as `pivot_news_id`, `news_has_attachments`.`attachment_id` as `pivot_attachment_id`, `news_has_attachments`.`created_at` as `pivot_created_at`, `news_has_attachments`.`updated_at` as `pivot_updated_at` from `attachments` inner join `news_has_attachments` on `attachments`.`id` = `news_has_attachments`.`attachment_id` where `news_has_attachments`.`is_featured_image` = '1' and `news_has_attachments`.`news_id` in (153243)
        Bindings
        • 0: 1
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:297
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:291
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
      • NewsController.php#297republica17.21msselect `authors`.`id`, `name`, `avatar`, `news_has_authors`.`news_id` as `pivot_news_id`, `news_has_authors`.`author_id` as `pivot_author_id`, `news_has_authors`.`created_at` as `pivot_created_at`, `news_has_authors`.`updated_at` as `pivot_updated_at` from `authors` inner join `news_has_authors` on `authors`.`id` = `news_has_authors`.`author_id` where `news_has_authors`.`news_id` in (153243)
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:297
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:291
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
      • NewsController.php#388republica14.9sselect `id`, `title`, `excerpt`, `permalink`, `pub_date`, `is_subscriber_only`, MATCH(title, excerpt) AGAINST ('The death toll rises to 115 in an attack on a Moscow concert hall' IN BOOLEAN MODE) as score from `news` where `id` != 153243 and `status` = 1 order by `score` desc, `pub_date` desc limit 6
        Bindings
        • 0: 153243
        • 1: 1
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:388
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:380
        • app/Http/Controllers/Frontend/News/NewsController.php:306
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
      • NewsController.php#388republica1940μsselect `attachments`.`id`, `directory`, `file`, `news_has_attachments`.`news_id` as `pivot_news_id`, `news_has_attachments`.`attachment_id` as `pivot_attachment_id`, `news_has_attachments`.`created_at` as `pivot_created_at`, `news_has_attachments`.`updated_at` as `pivot_updated_at` from `attachments` inner join `news_has_attachments` on `attachments`.`id` = `news_has_attachments`.`attachment_id` where `news_has_attachments`.`is_featured_image` = '0' and `news_has_attachments`.`news_id` in (98114, 99632, 146881, 153232, 153262, 153303)
        Bindings
        • 0: 0
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:388
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:380
        • app/Http/Controllers/Frontend/News/NewsController.php:306
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
      • NewsController.php#388republica1530μsselect `attachments`.`id`, `directory`, `file`, `news_has_attachments`.`news_id` as `pivot_news_id`, `news_has_attachments`.`attachment_id` as `pivot_attachment_id`, `news_has_attachments`.`created_at` as `pivot_created_at`, `news_has_attachments`.`updated_at` as `pivot_updated_at` from `attachments` inner join `news_has_attachments` on `attachments`.`id` = `news_has_attachments`.`attachment_id` where `news_has_attachments`.`is_featured_image` = '1' and `news_has_attachments`.`news_id` in (98114, 99632, 146881, 153232, 153262, 153303)
        Bindings
        • 0: 1
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:388
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:380
        • app/Http/Controllers/Frontend/News/NewsController.php:306
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
      • NewsController.php#416republica1172msselect `id`, `title`, `excerpt`, `permalink`, `pub_date`, `is_subscriber_only`, `read_time`, `news_slug` from `news` where `pub_date` between '2025-04-26 15:08:25' and '2025-04-27 15:08:25' and `id` not in (153243) and `status` = 1 order by `view_count` desc limit 3
        Bindings
        • 0: 2025-04-26 15:08:25
        • 1: 2025-04-27 15:08:25
        • 2: 153243
        • 3: 1
        Backtrace
        • app/Http/Controllers/Frontend/News/NewsController.php:416
        • vendor/laravel/framework/src/Illuminate/Cache/Repository.php:426
        • app/Http/Controllers/Frontend/News/NewsController.php:410
        • app/Http/Controllers/Frontend/News/NewsController.php:315
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
      • UpdateNewsVisitListener.php#27republica1570μsupdate `news` set `view_count` = `view_count` + 1, `news`.`updated_at` = '2025-04-27 15:08:25' where `id` = 153243 and `status` = 1
        Bindings
        • 0: 2025-04-27 15:08:25
        • 1: 153243
        • 2: 1
        Backtrace
        • app/Listeners/UpdateNewsVisitListener.php:27
        • vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:473
        • vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • vendor/laravel/framework/src/Illuminate/Routing/Route.php:264
      App\Models\News
      7News.php#?
      App\Models\Attachment
      7Attachment.php#?
      App\Models\Category
      1Category.php#?
      App\Models\Author
      1Author.php#?
          _token
          1Ttj7VmkqRWJ8T1vcUxPUY22rwYXAezyVMXTyi3m
          subscriber_only_page
          https://newtest.myrepublica.com/amp/news/the-death-toll-rises-to-115-in-an-attack-on-a-moscow-concer...
          _previous
          array:1 [ "url" => "https://newtest.myrepublica.com/amp/news/the-death-toll-rises-to-115-in-an-att...
          _flash
          array:2 [ "old" => [] "new" => [] ]
          path_info
          /amp/news/the-death-toll-rises-to-115-in-an-attack-on-a-moscow-concert-hall
          status_code
          200
          
          status_text
          OK
          format
          html
          content_type
          text/html; charset=UTF-8
          request_query
          []
          
          request_request
          []
          
          request_headers
          0 of 0
          array:22 [ "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "cf-ipcountry" => array:1 [ 0 => "US" ] "cf-connecting-ip" => array:1 [ 0 => "3.139.98.201" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "host" => array:1 [ 0 => "newtest.myrepublica.com" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "cf-ray" => array:1 [ 0 => "936d42a15e0661d2-ORD" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "priority" => array:1 [ 0 => "u=0, i" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "x-forwarded-for" => array:1 [ 0 => "3.139.98.201" ] ]
          request_cookies
          []
          
          response_headers
          0 of 0
          array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Sun, 27 Apr 2025 09:23:25 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IkdTcG0wSzdxYkhxM2ppem9vd3cvUkE9PSIsInZhbHVlIjoiSnFRV3ozSTA3d0REbXpjcEp2QkdLUFZGQTBEdnhjZnFITmZJWDJodTY0SE52ME1YVXljeEd3U2NiMFFVU2pMR2FJTmZaTUsvSWo1NlFUVlpVc1MzMExNTS9oWTBsMFFydlFlUDB1TXpLVGRhRDRZbjRjTURoS3JSdGllNmI0eDAiLCJtYWMiOiI3MDc4ZTJjY2QxM2ViMjk1OGZhNWI4YzhkMGVmZDhhOTlmYTNhNGQ4NzkxNTU5Y2VlNWYzNzBlMzM5NDBjYjFkIiwidGFnIjoiIn0%3D; expires=Mon, 27 Apr 2026 09:23:25 GMT; Max-Age=31536000; path=/; secure; samesite=laxXSRF-TOKEN=eyJpdiI6IkdTcG0wSzdxYkhxM2ppem9vd3cvUkE9PSIsInZhbHVlIjoiSnFRV3ozSTA3d0REbXpjcEp2QkdLUFZGQTBEdnhjZnFITmZJWDJodTY0SE52ME1YVXljeEd3U2NiMFFVU2pMR2FJTmZaT" 1 => "republica_session=eyJpdiI6ImZDNXVIZ20zcDVEbTQya1V2a004bFE9PSIsInZhbHVlIjoiQ1JVQTFYcnhXZDk5TWtRdG9FQXVCNS82Y1o1LzVxY2Rtc2ZCZXZSL0Y1cnd6QjRKQlJSSFpqOWFsaXQ5UmRjSlh5aGZHeFZKUGdZbFBYc3oxUGd6dXd5a1JDRGZJM1FaRU0vejFVN3F6N0d3b2Q4UWR2NWhNRzRoQmZvZVNvU1oiLCJtYWMiOiJjMDE4ZDJjMDI0NDcyZTRkZjliYjFiNjY5ZTEyYzM0NTRmOTIwYjE2YWU3MjFhZDE2MDI5MTk5YmU3MTYzMjIwIiwidGFnIjoiIn0%3D; expires=Mon, 27 Apr 2026 09:23:25 GMT; Max-Age=31536000; path=/; secure; httponly; samesite=laxrepublica_session=eyJpdiI6ImZDNXVIZ20zcDVEbTQya1V2a004bFE9PSIsInZhbHVlIjoiQ1JVQTFYcnhXZDk5TWtRdG9FQXVCNS82Y1o1LzVxY2Rtc2ZCZXZSL0Y1cnd6QjRKQlJSSFpqOWFsaXQ5UmRjSl" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IkdTcG0wSzdxYkhxM2ppem9vd3cvUkE9PSIsInZhbHVlIjoiSnFRV3ozSTA3d0REbXpjcEp2QkdLUFZGQTBEdnhjZnFITmZJWDJodTY0SE52ME1YVXljeEd3U2NiMFFVU2pMR2FJTmZaTUsvSWo1NlFUVlpVc1MzMExNTS9oWTBsMFFydlFlUDB1TXpLVGRhRDRZbjRjTURoS3JSdGllNmI0eDAiLCJtYWMiOiI3MDc4ZTJjY2QxM2ViMjk1OGZhNWI4YzhkMGVmZDhhOTlmYTNhNGQ4NzkxNTU5Y2VlNWYzNzBlMzM5NDBjYjFkIiwidGFnIjoiIn0%3D; expires=Mon, 27-Apr-2026 09:23:25 GMT; path=/; secureXSRF-TOKEN=eyJpdiI6IkdTcG0wSzdxYkhxM2ppem9vd3cvUkE9PSIsInZhbHVlIjoiSnFRV3ozSTA3d0REbXpjcEp2QkdLUFZGQTBEdnhjZnFITmZJWDJodTY0SE52ME1YVXljeEd3U2NiMFFVU2pMR2FJTmZaT" 1 => "republica_session=eyJpdiI6ImZDNXVIZ20zcDVEbTQya1V2a004bFE9PSIsInZhbHVlIjoiQ1JVQTFYcnhXZDk5TWtRdG9FQXVCNS82Y1o1LzVxY2Rtc2ZCZXZSL0Y1cnd6QjRKQlJSSFpqOWFsaXQ5UmRjSlh5aGZHeFZKUGdZbFBYc3oxUGd6dXd5a1JDRGZJM1FaRU0vejFVN3F6N0d3b2Q4UWR2NWhNRzRoQmZvZVNvU1oiLCJtYWMiOiJjMDE4ZDJjMDI0NDcyZTRkZjliYjFiNjY5ZTEyYzM0NTRmOTIwYjE2YWU3MjFhZDE2MDI5MTk5YmU3MTYzMjIwIiwidGFnIjoiIn0%3D; expires=Mon, 27-Apr-2026 09:23:25 GMT; path=/; secure; httponlyrepublica_session=eyJpdiI6ImZDNXVIZ20zcDVEbTQya1V2a004bFE9PSIsInZhbHVlIjoiQ1JVQTFYcnhXZDk5TWtRdG9FQXVCNS82Y1o1LzVxY2Rtc2ZCZXZSL0Y1cnd6QjRKQlJSSFpqOWFsaXQ5UmRjSl" ] ]
          session_attributes
          0 of 0
          array:4 [ "_token" => "1Ttj7VmkqRWJ8T1vcUxPUY22rwYXAezyVMXTyi3m" "subscriber_only_page" => "https://newtest.myrepublica.com/amp/news/the-death-toll-rises-to-115-in-an-attack-on-a-moscow-concert-hall" "_previous" => array:1 [ "url" => "https://newtest.myrepublica.com/amp/news/the-death-toll-rises-to-115-in-an-attack-on-a-moscow-concert-hall" ] "_flash" => array:2 [ "old" => [] "new" => [] ] ]
          ClearShow all
          Date ↕MethodURLData
          #12025-04-27 15:08:25GET/amp/news/the-death-toll-rises-to-115-in-an-attack-on-a-moscow-concert-hall11016