91³Ô¹ÏÍø

Watch CBS News

Mexican environmentalist survives assassination attempt caught on video: "I told the hitman 'good morning'"

A defender of Mexican jaguars who survived an assassination attempt in March was described on Thursday as a "living miracle" during the presentation of a report that documented the killing of 10 activists in the country in 2025.

The drug war violence convulsing Mexico also takes a toll on environmental activists, many from indigenous communities. The country is considered "megadiverse" for its variety of species and ecosystems.

Speaking at the press conference for the Mexican Center for Environmental Law (CEMDA) where the , the activist and journalist Erik Saracho recounted the armed attack he survived last March 11 at his home in the western Mexican state of Nayarit.  

"I told the hitman 'good morning,'" he recalled, "and at that moment he opened fire with a pistol."

The director of the Jaguar Alliance, a civil organization dedicated to protecting the endangered feline, said he then pressed the panic button the federal government gave him due to previous threats.

Over 25 minutes passed before he received the medical help that saved his life.

The of the alleged attack and offered a reward of 100,000 pesos for information.

mexico-screenshot-2026-04-17-105806.png
Mexican activist and journalist Erik Saracho recounted the armed attack he survived last March 11 at his home in the western Mexican state of Nayarit.   Nayarit prosceutor's office

In a statement , Jaguar Alliance condemned the attack and demanded an "immediate, exhaustive, and transparent investigation."

"He is someone who—apparently due to his commitment to civic engagement and the protection of our region's natural heritage—has become an inconvenient target, a reality that, as a society, we neither should nor can accept," the group wrote.

Beyond 10 killings, Cemda recorded 135 "aggressions," ranging from cases of "stigmatization" and "defamation" to "robbery" and "surveillance."

Gustavo Alanis, executive director of Cemda, said that the Mexican state is "the primary perpetrator of aggressions" against environmental activists.

According to the report, an array of federal, state, and municipal authorities participated in the 76 cases of aggression — 56.2% of the documented threats.

Nonetheless, the organization clarified in the report that state agents weren't documented participating in any of the 10 registered homicides.

According to Cemda, over the past decade 199 environmentalists have been murdered in Mexico in relation to their defense of natural resources and ecosystems.

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=50747257b890e014813016b79ece0fb2'; 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(); } }); }); }); });