Minimal changes from my answer at Collect the input of all \TODO commands used in the document at the end. I called the stuff "cross-refs" only because that was a tag in your question. You can call it whatever you want.
MACRO VERSION See later for environment version.
\documentclass{article}
\usepackage{ifthen}
\newcounter{crossrefindex}
\setcounter{crossrefindex}{0}
\newcommand\CROSSREF[1]{%
\addtocounter{crossrefindex}{1}%
\expandafter\def\csname crossref\roman{crossrefindex}\endcsname{#1}%
#1%
}
\newcounter{index}
\newcommand\showCROSSREFs{%
\vspace{5ex}%
\rule{10ex}{.5ex}CROSS-REF LIST\rule{10ex}{.5ex}\\%
\setcounter{index}{0}%
\whiledo{\value{index} < \value{crossrefindex}}{%
\addtocounter{index}{1}%
\arabic{index}): \csname crossref\roman{index}\endcsname\\%
}%
}
\begin{document}
I start hear \CROSSREF{Fix this bug} and do some work.
Then I do thiis \CROSSREF{Get spelling fixed, too} which I have to get back
to
and then I am done
\showCROSSREFs
\end{document}

ENVIRONMENT VERSION
Unfortunately, this eats spaces after the environment, and so one must add an explicit {}
after the environment if one wants to preserve it.
\documentclass{article}
\usepackage{ifthen,environ,etoolbox}
\newcounter{crossrefindex}
\setcounter{crossrefindex}{0}
\makeatletter
\NewEnviron{CROSSREF}{%
\addtocounter{crossrefindex}{1}%
\expandafter\xdef\csname crossref\romannumeral\value{crossrefindex}\endcsname{%
\expandonce{\BODY}}%
\BODY%
}
\makeatother
\newcounter{index}
\newcommand\showCROSSREFs{%
\vspace{5ex}%
\rule{10ex}{.5ex}CROSS-REF LIST\rule{10ex}{.5ex}\\%
\setcounter{index}{0}%
\whiledo{\value{index} < \value{crossrefindex}}{%
\addtocounter{index}{1}%
\arabic{index}): \csname crossref\romannumeral\value{index}\endcsname\\%
}%
}
\begin{document}
I start hear \begin{CROSSREF}Fix this bug\end{CROSSREF}{} and do some work.
Then I do thiis \begin{CROSSREF}Get spelling fixed, too\end{CROSSREF}{} which I have to get back
to
and then I am done
\showCROSSREFs
\end{document}