Contaminated Squares Introduction
Let's observe the following square, consisting only of the digits 0 - 9:
1034
4167
8414
3542

The outer shell of this square is:
1034
4  7
8  4
3542

It contains zeros, so we need to peel off the outer shell, leaving:
16
41

The outer shell of this square is:
16
41

It does not contain any zeros and is therefore a non-contaminated square. So basically, the definition of a non-contaminated square is when the outer shell of the square contains no zeros.
The Task
Given a square of digits (containing only non-negative integers) in any reasonable format, output the largest non-contaminated square by constantly peeling off the outer shell, in any reasonable format.
Test cases
Test case 1:
Input         Output

1234          1234
2345          2345
3456          3456
4567          4567

Test case 2:
Input         Output

123           123
204           204
346           346

Test case 3:
Input         Output

101           1
010           
101           

Test case 4:
Input         Output

000           (none)
000
000

This is code-golf, so the submission with the least amount of bytes wins!
JavaScript, 105 97 bytes
Saved 8 bytes thanks to @Patrick Roberts!
l=a=&gt;a.slice(1,-1)
p=a=&gt;l(a).map(l)
c=a=&gt;a.join``.replace(/[^0]/g,&quot;&quot;)
s=a=&gt;c(p(a))&lt;c(a)?s(p(a)):a

Defines function s, which returns a 2D array of integers when provided a 2D array of integers as input.
How it Works

function l: given an array a, returns a copy without its first and last indexes.

function p: given a 2D array a, calls l to remove the first and last row, then for each remaining row calls l to remove the fist and last column. This performs the onion peeling.

function c: given a 2D array a, returns a string that only contains the 0s in the stringified form of a.

function s: given a 2D array a, calls c on the peeled form of the array given by p, and on the array itself. Compares these strings lexicographically to determine if the peeled form has less 0s than the original. If it does, then the original is contaminated, so call s recursively on the peeled form. Otherwise return the original.